a:6:{i:0;s:18299:"				<div class="h1"><h1>American Sojourn Tour</h1></div>
				<p class="breadcrumb ar uu small"><a href="http://www.trippytripstravel.com/" title="Home">Home</a> 
				
									<b class="ffv p2px">&rsaquo;</b><a href="http://www.trippytripstravel.com/holiday-packages.htm" title="Holiday Packages">Holiday Packages</a>  			
									
				<b class="ffv p2px">&rsaquo;</b>American Sojourn Tour</p>
				<br />
				
								
						<script language="javascript"> 
							function topDestinationToggle(showHideDiv, switchTextDiv) {
							var ele = document.getElementById(showHideDiv);
							var text = document.getElementById(switchTextDiv);
							if(ele.style.display == "block") {
								ele.style.display = "none";
							  text.innerHTML = "View More &#9660;";
							}
							else {
							  ele.style.display = "block";
							  text.innerHTML = "View Less &#9650;";
							}
							}
		                </script>
											<script type="text/javascript">			
					(function($){	
					  $(function(){
						$('[id^=detailslider]').each(function(){
							$(this).DG_Slider({
								auto: true, mode:'fade', pager:true, pagerType:'short',controls:true
							});
						})
				
						$('a[rel=gall]').fancybox()
					  });	
					}(jQuery))
					</script>
					
					<br />
					<div class="data">
					<table class="w100 formTable bdr0 imgWidth">
					<tr>
					<td class="p10px">
					<table class="w100 packageForm">
											<tr>
						<td class="b p5px w125px vat">Duration </td>
						<td class="p5px pl0px vat">
						9 Nights / 10 Days 
						</td>
						</tr>
												<tr>
						<td class="b p5px w125px vat">Destination Covered </td>
						<td class="p5px pl0px vat">Washington, New York, Las Vegas, Los Angeles, San Francisco</td>
						</tr>
												<tr>
						<td class="b p5px w125px vat">Price (Starting From) </td>
						<td class="p5px pl0px vat"><span class="dif">On Request</span></td>
						</tr>
												<tr>
						<td></td>
						<td>
						<p>
						<form name="frmpackagedetail" id="frmpackagedetail" method="post" action="http://www.trippytripstravel.com/enquiry-form-10002.htm">
						<input type="hidden" name="subject" value="American Sojourn Tour - Tour Package"/>
						<input type="hidden" name="allocate_type" value="tour"/>
						<a href="#" onclick="document.getElementById('frmpackagedetail').submit();" class="button p7px pl12px pr12px c5px b large dib mt10px">Book Your Tour</a>
						<input type="hidden" name="pkg_slno" value="108192"/>
						</form>
						</p>
						</td>
						</tr>
											</table>
					</td>
											<td class="p10px vat imgWidth150 w150px lh0">
						<div class="demo-wrap">
						<ul class="lsn m0px p0px" >
															<li class="bdr bw3px c5px p1px"><div class="dt"><p class="ac vam dtc w150px h150px"><a rel="gall" data-fancybox="showZoomImage" href="https://ttw.wlimg.com/package-images/photo-big/dir_17/494778/179162.jpg"><img src="https://ttw.wlimg.com/package-images/photo-small/dir_17/494778/179162.jpg"  width="150" height="150"    alt="American Sojourn Tour" title="American Sojourn Tour" /></a></p></div></li>
															</ul>
						</div>
						</td>
											</tr>
					</table>
					</div>
					<br />
					
											<div class="headHr">
			            <p class="p7px b pl10px xlarge">Tour Itinerary</p>
			            </div>
			            
								<div class="data">
								<table class="w100 formTable bdr0 imgWidth">
								<tr>
								<td class="p10px vat">
								<p class="b large mb5px"><b class="dif">Day 1:</b> Arrival
								</p>
								<p class="aj">As you reach the lovely iconic city of the US, Los Angeles, our tour representative meets you and helps you with an assisted transfer to the hotel. After completing the check-in formalities, you are free to explore the city on your own. Following the rule of 'live and let live', the city is a mix of relaxation, leisure and excitement at the same time. Savor sumptuous dinner.<br />
<br />
Stay overnight in Los Angeles.</p>
								</td>
								</tr>
								</table>					
								</div>
								<div class="data">
								<table class="w100 formTable bdr0 imgWidth">
								<tr>
								<td class="p10px vat">
								<p class="b large mb5px"><b class="dif">Day 2:</b> Los Angeles- Las Vegas
								</p>
								<p class="aj">post breakfast, start the half-day guided sightseeing tour of Los Angeles including the prime attractions. The tour starts by driving past Beverly Hills- the hub of excitement and entertainment; the popular Sunset Boulevard street; the Mann's Chinese Theatre- a cinema palace of the famous Hollywood Walk of Fame, it is also known as TCL Chinese Theatre, Rodeo Drive- a street with 3-block setting that is known for being the center of luxury dining, shopping and luxurious accommodation experiences as well as options, and lastly, the very popular 'HOLLYWOOD' sign.<br />
<br />
Sightseeing is followed by a road journey to Las Vegas. As you reach, complete the check-in formalities. Continue with a city tour of Las Vegas attractions including the tall Stratosphere Tower with a height of 1,149 feet where you can relish rides, jumps and food at this site. The next attraction in line is Downtown Glitter Gulch- the street and the casino area where all of the city's action happens. Next is the wonderful Illumination tour and a show in Las Vegas at the Fremont Street Light Show. This night is going to be a memorable lifetime experience for you. Now, have dinner.<br />
<br />
Overnight stay in Las Vegas.</p>
								</td>
								</tr>
								</table>					
								</div>
								<div class="data">
								<table class="w100 formTable bdr0 imgWidth">
								<tr>
								<td class="p10px vat">
								<p class="b large mb5px"><b class="dif">Day 3:</b> Las Vegas
								</p>
								<p class="aj">after breakfast is at leisure. Celebrated as the Gambler's Paradise, Vegas is a resort town famous for its endless entertainment, lively energy and 24-hour running casinos. You can indulge in the activities of your interest. The other option is an excursion to the Grand Canyon. This site is located at a distance of four and a half house away from Las Vegas. Covering an area of 10 miles with 277 miles of length, it is known for its striking natural formation of layered red rocks. Most of the canyon is a national park. Some of the popular activities that the visitors can indulge in here include mule rides, aerial tours, hiking, camping and rafting in River Colorado.<br />
<br />
After dinner, stay overnight in Las Vegas.</p>
								</td>
								</tr>
								</table>					
								</div>
								<div class="data">
								<table class="w100 formTable bdr0 imgWidth">
								<tr>
								<td class="p10px vat">
								<p class="b large mb5px"><b class="dif">Day 4:</b> Las Vegas- Fresno
								</p>
								<p class="aj">After breakfast at the hotel, begin your journey for Fresno- famed to be the business, financial, cultural and entertainment hub of the San Joaquin Valley. As you arrive late afternoon, check-into the hotel. The evening is free. Explore this city on your own. Have sumptuous dinner at a delightful restaurant.<br />
<br />
Overnight stay in Fresno.</p>
								</td>
								</tr>
								</table>					
								</div>
								<div class="data">
								<table class="w100 formTable bdr0 imgWidth">
								<tr>
								<td class="p10px vat">
								<p class="b large mb5px"><b class="dif">Day 5:</b> Fresno- San Francisco
								</p>
								<p class="aj">On the 5th day of the tour, post breakfast, start your road journey to San Francisco, famous for cable cars, year-long fog, a hilly landscape, vibrant Victorian houses and the iconic Golden Gate Bridge. After completing the check-in formalities, begin the sightseeing tour with a walk on Lombard Street, USA's most crooked street. Thereafter, start your drive past the Civic Centre. Stop at the Twin Peaks for a photograph opportunity. This place offers a lovely view of the legendary Bridge, looking stunning in its bright orange color. Next in line is a drive the Fisherman's Wharf, a famous destination of the city, via Ghirardelli Square with a historic waterfront. This is a public landmark, a popular square, popular amidst locals as well as tourists for delightful seafood, remarkable sights and unique shopping experiences. Indulge in shopping at the Pier 39, a lively market that has over 110 stores and wonderful attractions. In the evening, you can enjoy a cruise on the famous San Francisco bay.<br />
<br />
Dinner and overnight stay in San Francisco.</p>
								</td>
								</tr>
								</table>					
								</div>
								<div class="data">
								<table class="w100 formTable bdr0 imgWidth">
								<tr>
								<td class="p10px vat">
								<p class="b large mb5px"><b class="dif">Day 6:</b> San Francisco-Buffalo- Niagara
								</p>
								<p class="aj">After breakfast on this day, board a flight to Buffalo. As you arrive at the Buffalo airport, hit the road for an assisted transfer to Niagara Falls. Complete the check-in formalities at the hotel. Linking the borders of Canada and the US, these waterfalls are one of the world's most- visited natural wonders. The view of the falls at night is even more mesmerizing with special light-effect added to the falls.<br />
<br />
Have your dinner. Overnight stay.</p>
								</td>
								</tr>
								</table>					
								</div>
								<div class="data">
								<table class="w100 formTable bdr0 imgWidth">
								<tr>
								<td class="p10px vat">
								<p class="b large mb5px"><b class="dif">Day 7:</b> Niagara- Corning
								</p>
								<p class="aj">after breakfast and continue to the legendary Niagara Falls for experiencing and witnessing the wonderful whirlpool and rapids, cruising past falls on the Maid of the Mist. The cruise is operational from the last week of May as per the weather conditions. The tourists who book the cruise before this time, they are offered The View Mobile Tram ride.<br />
<br />
Later on, get transferred to Corning- one of the chief innovators in materials science in the world. The place produces some of the most stunning ceramic and glass products. On arrival, check-in at the hotel. Proceed for a visit to the Corning Glass Museum, dedicated to history, art and science of glass. Witness the live glassmaking demonstration and learn how to make glass. The museum has more than 40,000 glass objects on display. This visit is followed by dinner.<br />
<br />
Stay overnight in Corning.</p>
								</td>
								</tr>
								</table>					
								</div>
								<div class="data">
								<table class="w100 formTable bdr0 imgWidth">
								<tr>
								<td class="p10px vat">
								<p class="b large mb5px"><b class="dif">Day 8:</b> Corning- Washington D.C.
								</p>
								<p class="aj">After breakfast, day 8 of the tour is going to be super exciting especially for kids and chocolate lovers as today you embark on a Chocolate tour at the famed Hershey's Chocolate World. The tour starts with a visit to the tropical rainforest where cocoa is grown as well as harvested. During your visit to the Hershey's Chocolate factory you can also understand the process, from making up to delivering the best quality products, starting from bean to milk chocolates all around. You will hear, feel and smell chocolate.<br />
<br />
After this memorable tour, you head to the capital city of the United States, Washington D.C., a pleasure for sightseeing enthusiast as it is dotted with a number of important buildings and other architectural marvel. On reaching, complete the check-in formalities at a hotel.<br />
<br />
After dinner, stay overnight in the capital city.</p>
								</td>
								</tr>
								</table>					
								</div>
								<div class="data">
								<table class="w100 formTable bdr0 imgWidth">
								<tr>
								<td class="p10px vat">
								<p class="b large mb5px"><b class="dif">Day 9:</b> Washington D.C. - New York
								</p>
								<p class="aj">Have your breakfast in the morning, followed by a guided city tour of Washington D.C. the tour starts with a drive to the Capitol Hill for a memorable photo opportunity. Known to be the city's largest historic residential neighborhood, it is the center of entertainment and nightlife here. Later on, continue with driving through Pennsylvania Avenue, to the Lafayette Park where you can enjoy superb views of the White House. Do not forget to click some photographs here. During your road journey, have stoppages at different landmarks of Washington D.C. like the Washington Monument- an amazing viewpoint offering panoramic views of the city; the World War II Memorial – constructed in the commemoration of American soldiers and other people who lost their lives in World War II; the Lincoln Memorial- constructed in the commemoration of the 16th President of the US -Abraham Lincoln and lastly, Jefferson Memorial- a superb Classic Revival architecture, another popular presidential memorial.<br />
<br />
After sightseeing, continue drive towards the New York. After reaching, check- in. New York is fast-paced busy city, known as the world's center of fashion, art, finance and culture. A huge number of leisure and business visitors from all around the world come here every year. The evening is booked for relishing 'Big Apple' on an Illumination Tour, as you drive past superbly well-lit landmarks of the city, proving to be an unforgettable experience. After this, you some free time at hand at Times Square.<br />
<br />
Post dinner, stay overnight in New York.</p>
								</td>
								</tr>
								</table>					
								</div>
								<div class="data">
								<table class="w100 formTable bdr0 imgWidth">
								<tr>
								<td class="p10px vat">
								<p class="b large mb5px"><b class="dif">Day 10:</b> Departure
								</p>
								<p class="aj">Today is the last day of the tour. Start it with a sumptuous breakfast following it with sightseeing tour of New York. The tour starts with visit to the Statue of Liberty, at Liberty Island. A World Heritage Site, this colossal statue is a representation of human spirit. Continue with sightseeing as drive past the well-known landmarks of the New York city like the New York Exchange, the Wall Street, the popular Manhattan Bridge, World Trade Centre site, Brooklyn Bridge, through Soho right up to the Little Italy, the Fifth Avenue, the Broadway and then to the Madison Square Garden up to the Times Square, lying on the confluence of the Broadway and the 42nd Street, known as the 'Crossroads of the World'. This place is city's entertainment hub. Later, you are scheduled for memorable photo opportunities at popular points such as Trump Tower, the United Nations Headquarters and Rockefeller Centre.<br />
<br />
Get on-time transfer to the airport to board a flight for your onward destination.</p>
								</td>
								</tr>
								</table>					
								</div>						<br />
												 <p class="headHr p7px b pl10px xlarge">Tour Detail</p>
			             <div class="data p15px aj">
										
						<p class="large b mb5px dif">Inclusions :</p>
						<ul>
															<li>Hotel</li>
																		<li>Sightseeing</li>
															</ul>
						<br />
											
						<p class="large b mb5px dif">Terms &amp; Conditions :</p>* Some Advance Percentage of total booking amount 
* Airfare/Transport fare to be paid full at one time in advance.~^#^~* Upon cancellation, refund will be made after deducting the Retention Amount. 
* Retention Amount varies as per the number of days left before your package start date. ~^#^~						
    	<p class="h dif xlarge b mb5px">Rate Card</p>
    	<div class="otherDetails aj">Super Luxury Services: "King's Choice" includes Sight Seeing + Snacks and Drinks for the entire journey + Free wifi, powerbanks, portable bluetooth speakers, E-Hookkah( served out of the car with 15 flavours to choose from) + 1 musical instrument (Guitar/Flute/Mouth Organ) + Video Shoot of the entire trip using Gopro camera ( underwater / Adventure Sports/ Documentary​ video/ Trip Music Video) Freely enjoy the moments of your trip instead of staying behind handling the camera.<br>
<br>
<br>
<br>
Luxury Service: Luxury Services: A budget friendly services package which includes Basic Service+Economy Service+ Free wifi,  Powerbank, Portable Bluetooth Speaker, E-Hookkah(served out of the car with 15 flavours to choose from).<br>
<br>
<br>
Economy Service: Covers your basic travel needs. includes Basic Service+Snacks and Drinks for the journey (To & From).</div><br>
		<div class="dynamic-data-container">
    	<table class="bdrAll" width="100%" cellpadding="5">
			<tr>
				<td class="headHr p5px b">SERVICE</td>
				<td class="headHr p5px b">Duration:</td>
				<td class="headHr p5px b">Charges:</td>
			</tr>
			<tr>
				<td class="data p5px">SUPER LUXURY SERVICE</td>
				<td class="data p5px">as per the tour duration</td>
				<td class="data p5px">2600/day (For a group of 4-6 people)</td>
			</tr>
			<tr>
				<td class="data p5px">LUXURY SERVICE</td>
				<td class="data p5px">As per the tour duration</td>
				<td class="data p5px">1600/day (For a group of 4-6 people)</td>
			</tr>
			<tr>
				<td class="data p5px">ECONOMY SERVICE</td>
				<td class="data p5px">2 days. ( Onward and return journey</td>
				<td class="data p5px">1200 (For a group of 4-6 people</td>
			</tr>
		</table></div><br>						</div>
												
						<div class="ac mb10px">
						<form name="frmpackagedetail" id="frmpackagedetail" method="post" action="http://www.trippytripstravel.com/enquiry-form-10002.htm">
						<input type="hidden" name="subject" value="American Sojourn Tour - Tour Package"/>
						<input type="hidden" name="allocate_type" value="tour"/>
						<a href="#" onclick="document.getElementById('frmpackagedetail').submit();" class="button p7px pl12px pr12px c5px b large dib mt10px">Book Your Tour</a>
						<input type="hidden" name="pkg_slno" value="108192"/>
						</form>
						</div>
						
						";i:1;s:61:"Book American Sojourn Tour - 9 Nights / 10 Days Tour Packages";i:2;s:160:"book american sojourn tour - 9 nights / 10 days tour packages, heritage tour packages, washington, new york, las vegas, los angeles, san francisco tour packages";i:3;s:195:"TrippyTrip Travels offers American Sojourn Tour - 9 Nights / 10 Days tour package, budget Heritage tour packages for Washington, New York, Las Vegas, Los Angeles, San Francisco at exciting price.";i:4;s:452:"
			<script type="application/ld+json">
		    {
		      "@context": "https://schema.org",
		      "@type": "TouristAttraction",
		      "address": {
		        "@type": "PostalAddress",
		         "addressRegion": "Washington, New York, Las Vegas, Los Angeles, San Francisco"        
		                 },
		      "description": "",
		      "name": "American Sojourn Tour",
		      "telephone": "+91-8808443322"
		    }
		    </script>
			";i:5;N;}