a:6:{i:0;s:12828:"				<div class="h1"><h1>Jagannath Puri Rath Yatra Package</h1></div>
				<p class="breadcrumb ar uu small"><a href="http://www.carforhire.biz/" title="Home">Home</a> 
				
									<b class="ffv p2px">&rsaquo;</b><a href="http://www.carforhire.biz/tour-packages.htm" title="Tour Packages">Tour Packages</a>  			
									
				<b class="ffv p2px">&rsaquo;</b>Jagannath Puri Rath Yatra Package</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">Bhubaneswar, Konark, Puri</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.carforhire.biz/enquiry-form-10002.htm">
						<input type="hidden" name="subject" value="Jagannath Puri Rath Yatra Package - 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="90428"/>
						</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_14/392963/156300.jpg"><img src="https://ttw.wlimg.com/package-images/photo-small/dir_14/392963/156300.jpg"  width="150" height="150"    alt="Jagannath Puri Rath Yatra Package" title="Jagannath Puri Rath Yatra Package" /></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> Puri (Arrival)
								</p>
								<p class="aj">Upon arrival in Puri, check into your hotel. One of the four destinations of the most revered Chardham Yatra, Puri is listed among the holiest destinations of Hindu pilgrimage. The sacred place is best-known as the abode of Lord Jagannath.<br />
<br />
Later in the day, proceed to Chilika Lake.<br />
<br />
Spread across 600 to 1100 sq. kilometers depending upon the season of your visit, Chilika Lake is Asia’s largest brackish water lagoon separated from Bay of Bengal by a 60 kilometers long mashy islands and sand bar known as Rajhansa. Chilika Lake is a designated Ramsar Site due to its rich biodiversity. The lake has also recorded over million plus birds including migratory birds like pink flamingoes, crane and herons that come here for nesting during winter season. Partake in fun activities.<br />
<br />
If time allows today, you could also visit the Puri Beach and stroll around in the market for some shopping. Return back to hotel for your 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 2:</b> Rath Yatra Darshan
								</p>
								<p class="aj">On the second day of your Jagannath Rath Yatra tour package, proceed to witness one of the grandest religious spectacles on the planet. Witness the Rath Yatra proceedings from a roof top position which will also offer great photo ops if you are a shutterbug.<br />
<br />
Rath Yatra celebrates the Hindu belief that Lord Jagannath takes an yearly break in midsummer to retire to his Aunt’s house along with his sister Subhadara and elder brother Balabhadra. All three deities are brought back to the main street in Puri and loaded in their grand chariots and then the great procession proceeds towards Gundicha Temple where the lord enjoy vacation at his aunt’s house.<br />
<br />
Such is the force of the procession and the presence of devotees in huge number that this annual ritual led to the coining of the English term juggernaut which means ‘an unstoppable force’. During the yatra, Puri is colored in the most vivid hues of sheer joy & enjoyment and flocked by devotees and travelers from all part of India and across the globe.<br />
<br />
Then return to your hotel for the 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> Puri- Konark (35km/ around half an hour drive)
								</p>
								<p class="aj">On the third day, post an unhurried breakfast, check-out from the hotel and drive to Konark. On the way to Konark, visit Raghurajpur – the heritage crafts village of Odisha. Art of palm leaf engravings, tussar paintings, stone carvings and papier mache toys are produced in this village.<br />
<br />
Later, after getting an insight into the artwork of this place, continue your journey towards Konark, which is a town in the Puri district. On arrival in Konark, check-in at a hotel and rest for some time.<br />
<br />
You may visit the major attractions of the place including Konark Sun temple; a World Heritage Site designed in a shape of a colossal chariot with seven horses and ten wheels carrying Sun god Surya across heavens, the A.S.I Museum (Archaeological Survey of India); home to more than 260 antiques retrieved from the clearance work of Sun temple and Chandrabhaga beach; it is believed that a holy dip in Chandrabhaga can cure leprosy.  You can also have a great surfing experience at Kushabhadra River.<br />
<br />
About Sun Temple<br />
<br />
The Sun Temple of Konark, spelt by some as Konarak and sometimes called the “Black Pagoda” was built in approximately 1250 AD by King Narasimhadeva I of the Eastern Ganga Dynasty. The word Konark is derived from the Sanskrit words, Kona (corner) and Arka (sun) which was dedicated to the Sun god Surya.<br />
<br />
Constructed to honor the sun god, Sun Temple in Konark is designed as a representation of this deity’s horse-drawn chariot, complete with horses and giant wheels. The temple is conceived as a colossal chariot of the sun god Surya pulled by seven horses and twelve pairs of exquisitely carved wheels, carrying the god across heavens.<br />
<br />
This temple is one of the UNESCO world heritage sites and also featured on the seven wonders of India in NDTV’s and Times of India’s list.<br />
<br />
Stay overnight at 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> Konark – Bhubaneswar (64km)
								</p>
								<p class="aj">On the fourth day, after a delicious breakfast, check-out from the hotel and drive towards Bhubaneswar. On the way to this destination visit Pipili, a village widely known for its skilled artisans, who are into appliqué handicrafts. You may also visit Dhauli Hill which is situated on the banks of Daya River. This hill is renowned for its Rock Edicts of Ashoka. On the top of the hill is a white pagoda which was built in the year 1970 and is a must visit attraction.<br />
<br />
Then head to Chausathi Yogini Temple which was used by a tantric for his worship of Goddess Kali. Dating back to 9th century, this temple is circular in shape and open from the top.<br />
<br />
Later, proceed towards Bhubaneswar – the state capital, which has a history dating back to 3000 years.<br />
<br />
On arrival at this destination, check-in at a hotel and stay overnight.</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> Bhubaneswar
								</p>
								<p class="aj">Fifth day is set out to explore Bhubaneswar. After breakfast, leave the hotel to enjoy a sightseeing tour to this splendid destination. With temples in almost every street, this city is popularly known as the ‘Temple City of India’.<br />
<br />
On a trip to this destination, you can pay a visit to some of the most renowned temples, which include Lingaraj Temple, Ananta Vasudeva Temple and Rajarani Temple. These temples display a great work of architecture, prevailing in the earlier times. Some of the newly constructed temples that also deserve a visit include Iskcon and Ram Mandir.<br />
<br />
Later, visit Udayagiri and Khandagiri Caves, which are partly natural and partly artificial. The inscriptions done on these caves are believed to be from 1st and 2nd centuries BC.<br />
<br />
While exploring this destination, do not forget to visit the luxuriant Nandankanan Zoological Park (closed on Mondays and government holidays). This park comprises a zoo and a botanical garden and it sprawls across an area of 400 hectares. You can also enjoy a lion and tiger safari ride at this park.<br />
<br />
After sightseeing, get back to the hotel and stay overnight.</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> Bhubaneswar (Departure)
								</p>
								<p class="aj">On sixth day, check out from the hotel and proceed to Bhubaneswar airport/railway station for your onward journey.</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.carforhire.biz/enquiry-form-10002.htm">
						<input type="hidden" name="subject" value="Jagannath Puri Rath Yatra Package - 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="90428"/>
						</form>
						</div>
						
						";i:1;s:72:"Book Jagannath Puri Rath Yatra Package - 5 Nights / 6 Days Tour Packages";i:2;s:151:"book jagannath puri rath yatra package - 5 nights / 6 days tour packages, religious & pilgrimage tour packages, bhubaneswar, konark, puri tour packages";i:3;s:199:"Book Jagannath Puri Rath Yatra Package - 5 Nights / 6 Days tour packages from M/s Car for Hire - Get attractive 5 Nights / 6 Days Religious & Pilgrimage  tour packages for  Bhubaneswar, Konark, Puri.";i:4;s:430:"
			<script type="application/ld+json">
		    {
		      "@context": "https://schema.org",
		      "@type": "TouristAttraction",
		      "address": {
		        "@type": "PostalAddress",
		         "addressRegion": "Bhubaneswar, Konark, Puri"        
		                 },
		      "description": "",
		      "name": "Jagannath Puri Rath Yatra Package",
		      "telephone": "+91-9937671375"
		    }
		    </script>
			";i:5;N;}