a:6:{i:0;s:12704:"				<div class="h1"><h1>Magnificent Rajasthan Tour</h1></div>
				<p class="breadcrumb ar uu small"><a href="http://www.visiontourandtravels.co.in/" title="Home">Home</a> 
				
									<b class="ffv p2px">&rsaquo;</b><a href="http://www.visiontourandtravels.co.in/tour-packages.htm" title="Tour Packages">Tour Packages</a>  			
									
				<b class="ffv p2px">&rsaquo;</b>Magnificent Rajasthan 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">
						5 Nights / 6 Days 
						</td>
						</tr>
												<tr>
						<td class="b p5px w125px vat">Destination Covered </td>
						<td class="p5px pl0px vat">Bikaner, Jaipur, Jaisalmer, Jodhpur</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.visiontourandtravels.co.in/enquiry-form-10002.htm">
						<input type="hidden" name="subject" value="Magnificent Rajasthan 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="73525"/>
						</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_16/450636/131659.jpg"><img src="https://ttw.wlimg.com/package-images/photo-small/dir_16/450636/131659.jpg"  width="150" height="150"    alt="Magnificent Rajasthan Tour" title="Magnificent Rajasthan 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> Jodhpur (Arrival)
								</p>
								<p class="aj">Upon your arrival in Jodhpur, check into the hotel. Located in the western region of Rajasthan, Jodhpur is one of the most popular cities in the state of Rajasthan. It is also known as the ‘Blue City’ because it has many houses painted in blue.<br />
<br />
The magnificent and formidable Mehrangarh Fort dominates the sky line of the city. Built entirely of red sandstones, the fort is perched atop of a hill. Standing as a testimony to various battles and bloodshed, the strong walls of the fort seem to have many secrets buried in. The fort has palatial period rooms, extensive courtyards and alluring latticed windows. Several sections of the fort preserve the priceless belongings of the royals such as arms, palanquins, artifacts and textiles.<br />
<br />
Later, take a short walk from the Mehrangarh Fort to reach another prominent landmark of the city-Jaswant Thada. It is a shimmering white marble mausoleum that was built in the memory of Maharaja Jaswant Singh II.<br />
<br />
Jodhpur is equally popular for its local markets. The Sardar Market is located near the clock tower in the city and is quite famous for its textiles in different prints, leather footwear and artifacts. Apart from exploring the local markets, the astonishing art & craft will give you a brief about the city’s true essence.<br />
<br />
Later, return to the hotel for 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 2:</b> Jodhpur to Jaisalmer (Drive)
								</p>
								<p class="aj">Today, check out of the hotel and drive to the next destination ‘Jaisalmer’.  Founded by Maharana Jaisal Singh, a Rajput Singh in 1156 AD, the city derives its name from the ruler itself.<br />
<br />
A part of the Great Indian Thar Desert, the city is dotted by several Havelis that were built by the royal merchants of the city.<br />
<br />
Upon arrival in Jaisalmer, check into the hotel. The rest of the day is free for leisure activities. Stay overnight in the hotel.</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> Jaisalmer (Sightseeing)
								</p>
								<p class="aj">Today, in the morning, embark on a sightseeing tour of Jaisalmer. The city is quite famous for the Jaisalmer Fort, also known as Sonar Quila. The town bustles with various shops, hotels and ancient havelis and is considered as the only living fort in India. Inside this fort, visit the Raj Mahal (royal palace), the Laxminath Temple and several Jain temples. The palace museum has a huge collection of the items belonging to the royal era.<br />
<br />
Other attractions that you will visit include Patwon-ki-Haveli, Gadsisar Lake (built in the 14th century by Maharawal Gadsi for the conservation of rain water) and Sam Sand Dunes.<br />
<br />
Later in the evening, drive 45 km to the west of the city to visit Sam Sand Dunes. A camel ride to the Sunset Point (direct payment basis) can be an unforgettable experience.<br />
<br />
Thereafter in the evening, drive 45 kilometers to the west of the city to visit Sam Sand Dunes. A camel ride to the Sunset Point is an experience par excellence. Stay overnight in the hotel</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> Jaisalmer to Bikaner (Drive)
								</p>
								<p class="aj">In the morning, proceed to the next destination-Bikaner. A vast expanse of glistening desert, the city lies in the northern region of the state. It was founded by the Rathore Prince- Rao Bikaji in 1488 AD. Famous for Camel Safaris, it boasts of the world’s largest Camel research and breeding farm.<br />
<br />
After reaching Bikaner, take a trip to the massive Junagarh Fort. The fort was built in 1593 AD by Raja Rai Singh- the sixth ruler of the city. Some of the striking palaces inside the fort are Anup Mahal, Ganga Niwas and Rang Mahal. Moreover, you can discover the rich treasures of the bygone era in the museum.<br />
<br />
Thereafter, visit the Laxmi Niwas Palace, an erstwhile residence of the former ruler- Maharaja Ganga Singh. It is a wonderful example of Indo-Saracenic style and now serves as a luxury hotel.<br />
<br />
Thereafter, also visit the National Research Center on Camel. Spread over an area of more than 2000 acres, it is one of its kinds in Asia. While spending your time here, you can enrich your knowledge about Camel, the famous ‘Ship of the Desert’. The centre also has a camel museum that throws light on the developmental aspects of the research work.</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> Bikaner to Jaipur (Drive and Sightseeing)
								</p>
								<p class="aj">Today in the morning, check out of the hotel and drive to the city of Jaipur. Upon arrival, check in at the hotel and retire for the day. In the afternoon, leave the hotel and visit the famous ‘City Palace’. The impressive granite & marble structure offers a perfect blend of Mughal and Rajput architecture. The famous ‘Chandra Mahal Palace’ in the building is still inhabited by the former royal family. The ground floor is open to the general public.<br />
<br />
There is museum inside the City Palace, which is known as Maharaja Sawai Man Singh II Museum, and you’ll feel delighted to see the artifacts and items of the former royalty. For display, there are an array of royal possessions, including arms, costumes, inscriptions and paintings. A tour to the palace is incomplete without visiting the Govind Devji Temple dedicated to Lord Krishna.<br />
<br />
Later, visit Jantar Mantar- an observatory, where you will find a good collection of complex instruments that were once used for astronomical studies. It is one of the largest observatories built by Maharaja Jai Singh II and also listed as a UNESCO World Heritage Site.<br />
<br />
Return to the hotel for dinner and 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 6:</b> Jaipur (Sightseeing)
								</p>
								<p class="aj">In the morning, embark on a road journey to the Amber Fort. En-route to the fort, halt for a visit to Hawa Mahal. Hawa Mahal is a prominent tourist attraction in the city. The windows of the monument built through honeycombed pink sandstone were once used by the royal ladies to watch royal processions passing the streets.<br />
<br />
Feel the luxury enjoyed by the royals as you take an elephant ride up to the Amber Fort. Nestled atop of a hill, the grand fort impresses visitors at the first sight. Discover the history as you move through large gates, expansive courtyards and palatial period rooms.<br />
<br />
Later, check out of the hotel and return back home with everlasting memories from the trip.</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. ~^#^~												</div>
												
						<div class="ac mb10px">
						<form name="frmpackagedetail" id="frmpackagedetail" method="post" action="http://www.visiontourandtravels.co.in/enquiry-form-10002.htm">
						<input type="hidden" name="subject" value="Magnificent Rajasthan 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="73525"/>
						</form>
						</div>
						
						";i:1;s:65:"Book Magnificent Rajasthan Tour - 5 Nights / 6 Days Tour Packages";i:2;s:140:"book magnificent rajasthan tour - 5 nights / 6 days tour packages, heritage tour packages, bikaner, jaipur, jaisalmer, jodhpur tour packages";i:3;s:193:"Book Magnificent Rajasthan Tour - 5 Nights / 6 Days tour packages from Vision Tour & Travels - Get attractive 5 Nights / 6 Days Heritage  tour packages for  Bikaner, Jaipur, Jaisalmer, Jodhpur.";i:4;s:443:"
			<script type="application/ld+json">
		    {
		      "@context": "https://schema.org",
		      "@type": "TouristAttraction",
		      "address": {
		        "@type": "PostalAddress",
		         "addressRegion": "Bikaner, Jaipur, Jaisalmer, Jodhpur"        
		                 },
		      "description": "",
		      "name": "Magnificent Rajasthan Tour",
		      "telephone": "91-9987181732/8684821464"
		    }
		    </script>
			";i:5;N;}