a:7:{i:0;s:13694:"				<div class="h1"><h1>Splendor Of Rajasthan With Erotic Temple</h1></div>
				<p class="breadcrumb ar uu small"><a href="https://www.heavensgroup.co.in/" title="Home">Home</a> 
				
									<b class="ffv p2px">&rsaquo;</b><a href="https://www.heavensgroup.co.in/tour-packages.htm" title="Tour Packages">Tour Packages</a>  			
									
				<b class="ffv p2px">&rsaquo;</b>Splendor Of Rajasthan With Erotic Temple</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">
						13 Nights / 14 Days 
						</td>
						</tr>
												<tr>
						<td class="b p5px w125px vat">Destination Covered </td>
						<td class="p5px pl0px vat">New Delhi, Bikaner, Jaisalmer, Jodhpur, Pushkar, Jaipur, Agra, Jhansi, Varanasi, Hawa Mahal, Taj Mahal, Itmad-Ud-Daulah, Durga Temple, Jain Temples, Mehrangarh Fort, Jaisalmer Fort, Jaswant Thada, Buland Darwaza, Fatehpur Sikri, Amber Fort, City Palace, India Gate, Archaeological Museum</td>
						</tr>
												<tr>
						<td class="b p5px w125px vat">Price </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="https://www.heavensgroup.co.in/travel-inquiry.htm">
						<input type="hidden" name="subject" value="Splendor Of Rajasthan With Erotic Temple - 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="45243"/>
						</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_10/278544/89434.jpg"><img src="https://ttw.wlimg.com/package-images/photo-small/dir_10/278544/89434.jpg"  height="150"  width="150"    alt="Splendor Of Rajasthan With Erotic Temple" title="Splendor Of Rajasthan With Erotic Temple" loading="lazy"></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> Delhi (Arrival)
								</p>
								<p class="aj">Late in the evening, arrive at the Delhi airport  followed by assisted transfer 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> Delhi
								</p>
								<p class="aj">In the morning, embark on a sightseeing tour of Delhi. The places you will visit here include Jama Masjid, India Gate, Gandhi Memorial,  Parliament House, Humayun’s Tomb and the Qutub Minar Complex. Post sightseeing, return to the hotel for night 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 3:</b> Delhi - Bikaner
								</p>
								<p class="aj">Post breakfast in the morning, drive to the railway station  to board the train to Bikaner. Upon arrival in Bikaner, check into the hotel for night 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 4:</b> Bikaner - Jaisalmer
								</p>
								<p class="aj">Post breakfast in the morning, go out for a sightseeing tour of Bikaner city. The attractions you will visit here include Jungarh Fort (Built in 1611 AD, it was the seat and stronghold of Rao Bika, the first ruler of Bikaner.) Other places you will visit include Karan  Mahal, Bijai Phool Mahal and Anup Mahal. Post lunch, leave by road for Jaisalmer. Upon arrival, check into the hotel for night 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 5:</b> Jaisamer
								</p>
								<p class="aj">Post breakfast in the morning, embark on a sightseeing tour of Jaisalmer. The attractions you will cover include Jaisalmer Fort, Salim Singh-Ki-Haveli, Patwon-Ki-Haveli and Megh Durbar. Besides, you will also visit Lodurva-a small village in Rajasthan famous for its Jain temples. In the evening, enjoy camel ride at the Sam sand dunes. Later, return to the hotel for night stay in Jaisalmer.</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> Jaisalmer - Jodhpur
								</p>
								<p class="aj">In the morning, leave by road for Jodhpur. On reaching Jodhpur, check into the hotel. In the afternoon, go out on a sightseeing tour of Jodhpur covering Mehrangarh Fort and Jaswant Thada, a 19th century white marble cenotaph. Later, return to the hotel for night 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> Jodhpur - Pushkar
								</p>
								<p class="aj">In the morning, leave by road for Pushkar. On reaching Pushkar, check in at the tented accommodation. The afternoon is booked to enjoy the camel fair in Pushkar. Stay overnight in the tent.</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> Pushkar - Jaipur
								</p>
								<p class="aj">Post breakfast in the morning, leave by road for Jaipur. On reaching Jaipur, check into the hotel. In the afternoon, go out for a sightseeing tour of Jaipur. The places you will visit here include City Palace (a fine blend of Rajasthani and Mughal architecture), Jantar Mantar, Hawa Mahal and the local bazaars. 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 9:</b> Jaipur - Agra
								</p>
								<p class="aj">In the morning, take a road trip to Amber Fort followed by an elephant/jeep ride to the main gate. While returning back to the city, see Jal Mahal. Later, drive towards Agra. On the way, visit Fatehpur Sikri. The red sandstone city abounds with various attractions such as Buland Darwaza, Jodha Bai Palace, Jama Masjid, Birbal Bhawan and Panch Mahal. On reaching Agra, check into the hotel for night 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 10:</b> Agra
								</p>
								<p class="aj">In the morning, enjoy the views of Taj Mahal cloaked in the canopy of the rising sun. Built by Shah Jahan, Taj Mahal is the most extravagant monument built in the history of Mughal architecture. Thereafter, have breakfast and explore other attractions in Agra such as Red Fort and Itmad-Ud-Daulah Tomb. Stay overnight in the hotel.</p>
								</td>
								</tr>
								</table>					
								</div><div id="show_more_content" style="display:none;">
									<div class="data">
									<table class="w100 formTable bdr0 imgWidth">
									<tr>
									<td class="p10px vat">
									<p class="b large mb5px"><b class="dif">Day 11:</b> Agra - Jhansi - Khajuraho
									</p>
									<p class="aj">In the morning, drive to the railway station to board the train to Jhansi. Upon arrival in Jhansi, leave by road for Khajuraho. The sleepy town of Khajuraho is around 180 kilometers away from Jhansi. On the way, visit Orchha. On reaching Khajuraho, check into the hotel for night  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 12:</b> Khajuraho
									</p>
									<p class="aj">In the morning, go out to explore the erotic temples of Khajuraho. Start by exploring the Eastern Group of Temples which include The Javeri Temple and Parasvanath Temple. The evening is free to relax. Stay overnight in Khajuraho.</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 13:</b> Khajuraho - Varanasi
									</p>
									<p class="aj">The morning is free to relax and rest. In the afternoon, drive to the airport to board flight for Varanasi. Upon arrival in Varanasi, meet our representative and hit the road to Sarnath. Here you will be visiting Dhamek Stupa, Chaukhandi Stupa, Ashoka Pillar and Sarnath Archaeological Museum. Later, return to the hotel for night 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 14:</b> Varanasi - Delhi - By Air
									</p>
									<p class="aj">Early morning, enjoy a boat cruise on the holy river Ganges. Thereafter, return to the hotel for breakfast. Later, go out for the city tours covering the famous Bharat Mata Temple, Durga Temple and the famous Benares Hindu University. In the afternoon, drive to the airport to board flight for Delhi. Upon arrival in Delhi, meet the  representative and have dinner at a city restaurant.  Post dinner, drive to the airport/railway station to board flight for onward journey.</p>
									</td>	
									</tr>
									</table>				
									</div>					
							</div>							<p class="mt10px ac"><a class="buttonBig p5px10px dib b" id="more_button" href="javascript:topDestinationToggle('show_more_content','more_button');" >View More &#9660;</a></p>
													<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="https://www.heavensgroup.co.in/travel-inquiry.htm">
						<input type="hidden" name="subject" value="Splendor Of Rajasthan With Erotic Temple - 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="45243"/>
						</form>
						</div>
						
						";i:1;s:81:"Book Splendor Of Rajasthan With Erotic Temple - 13 Nights / 14 Days Tour Packages";i:2;s:422:"book splendor of rajasthan with erotic temple - 13 nights / 14 days tour packages, religious & pilgrimage tour packages, new delhi, bikaner, jaisalmer, jodhpur, pushkar, jaipur, agra, jhansi, varanasi, hawa mahal, taj mahal, itmad-ud-daulah, durga temple, jain temples, mehrangarh fort, jaisalmer fort, jaswant thada, buland darwaza, fatehpur sikri, amber fort, city palace, india gate, archaeological museum tour packages";i:3;s:452:"Heavens Group offers Splendor Of Rajasthan With Erotic Temple - 13 Nights / 14 Days tour package, budget Religious & Pilgrimage tour packages for New Delhi, Bikaner, Jaisalmer, Jodhpur, Pushkar, Jaipur, Agra, Jhansi, Varanasi, Hawa Mahal, Taj Mahal, Itmad-Ud-Daulah, Durga Temple, Jain Temples, Mehrangarh Fort, Jaisalmer Fort, Jaswant Thada, Buland Darwaza, Fatehpur Sikri, Amber Fort, City Palace, India Gate, Archaeological Museum at exciting price.";i:4;s:685:"
			<script type="application/ld+json">
		    {
		      "@context": "https://schema.org",
		      "@type": "TouristAttraction",
		      "address": {
		        "@type": "PostalAddress",
		         "addressRegion": "New Delhi, Bikaner, Jaisalmer, Jodhpur, Pushkar, Jaipur, Agra, Jhansi, Varanasi, Hawa Mahal, Taj Mahal, Itmad-Ud-Daulah, Durga Temple, Jain Temples, Mehrangarh Fort, Jaisalmer Fort, Jaswant Thada, Buland Darwaza, Fatehpur Sikri, Amber Fort, City Palace, India Gate, Archaeological Museum"        
		                 },
		      "description": "",
		      "name": "Splendor Of Rajasthan With Erotic Temple",
		      "telephone": "+91-9034015552"
		    }
		    </script>
			";i:5;N;i:6;N;}