a:6:{i:0;s:13381:"				<div class="h1"><h1>Nepal - Nagarkot.Tour</h1></div>
				<p class="breadcrumb ar uu small"><a href="http://www.skytriptraveleasy.com/" title="Home">Home</a> 
				
									<b class="ffv p2px">&rsaquo;</b><a href="http://www.skytriptraveleasy.com/packages.htm" title="Packages">Packages</a>  			
									
				<b class="ffv p2px">&rsaquo;</b>Nepal - Nagarkot.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">Kathmandu, Pokhara, Nagarkot</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.skytriptraveleasy.com/enquiry-form-10002.htm">
						<input type="hidden" name="subject" value="Nepal - Nagarkot.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="21191"/>
						</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_9/264226/38922.jpg"><img src="https://ttw.wlimg.com/package-images/photo-small/dir_9/264226/38922.jpg"  width="150" height="150"    alt="Nepal - Nagarkot.Tour" title="Nepal - Nagarkot.Tour" /></a></p></div></li>
															</ul>
						</div>
						</td>
											</tr>
					</table>
					</div>
					<br />
					
					Services Other Than Specified.<br />
Entrance Fee At The Monumental Sites During The Sightseeing.<br />
Guide During The Sightseeing.<br />
If There Is Any Domestic Flight Been Taken There Is An Airport Tax Of Inr 125 Pp Each Time Taking The Flight Payable.<br />
Directly At The Airport At The Time Of Check In. This Cannot Be Included In The Proposal.Any Expenses Of Personal Nature Such As Drinks, Laundry, Telephone/Fax Calls.<br />
Any Expenses Caused By Reasons Beyond Our Control Such As Flight Delays, Rescheduling Or Cancellations, Any Accidents,<br />
Medical Evacuations, Riots, Strikes, Etc.<br />
Any Tips To Drivers, Hotel Staff, Any Meals Apart From The Ones Mentioned Above.<br />
Any Other Tax Or Service Charge That Could Be Enforced During This Period Will Be Extra & Need To Borne By You.<br />
Inr 1000 And 500 Demonitation Indian Notes Are Banned In Nepal. The Clients Should Be Informed Of This.<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> Kathmandu
								</p>
								<p class="aj">Meeting at airport upon arrival by our personnel. Transfer to hotel. Kathmandu is the capital of Nepal and the Kathmandu Valley is the political and cultural heart of the Kingdom. The urban sprawl that makes up modern Kathmandu is in fact two cities, Patan and Kathmandu.</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> Kathmandu
								</p>
								<p class="aj">This morning you will be taken for a visit of the Hindu culture in Nepal, Pashupatinath. This is the place where holy saddhus pray and cremations on the Bagmati River are carried out. We then continue to the holiest shrine for the Buddhist culture in Nepal, Bouddhanath, with its large stupa, this is the place where all devout Buddhists come for a pilgrimage. After completion of these two spots, you will be taken take you for a visit to Patan. Also known as  Lalitpur  , the city of beauty is separated from Kathmandu only by the Bagmati River and is the second largest town in the valley. Lalitpur is fragmented from other cities due to its substantive architectural ancient masterpieces. Patan's central Durbar Square is absolutely packed with temples: Its an architectural center point with a far greater concentration of temples per sq. meter than in Kathamandu or Bhaktapur. Within the city also lies the Tibetan refugee center, home to most of the valley's Tibetan population.  While technically refugees, the Tibetans are some of the wealthiest people in the valley because of the carpet industry they operate.  For those looking to bring home a fine Tibetan carpet, this is the place to shop. You will then go to Swayambhunath the golden spire of the 5th-century Swayambhu stupa is adorned with a colorful fluttering of prayer flags; it crowns a hill overlooking the Kathmandu Valley and offers fantastic views over the city of Kathmandu. Swayambhunath is one of the most recognizable symbols in Nepal and the painted eyes of Buddha watch all who ascend the worn stone steps.</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> Kathmandu - Pokhara
								</p>
								<p class="aj">After breakfast, drive to Pokhara. Pokhara is 180 Km & is a 04 hours drive from Chitwan. From Pokhara town (2,352 feet) the 25,000+ peaks of the Annapurna and Dhaulagiri ranges rise a scant 20 miles away with no intervening ridges to spoil the view. Overnight at 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> Pokhara
								</p>
								<p class="aj">This morning you will go for a excursion trip to Sarangkot.The village of Sarangkot (1590 m) is situated on the top of a hillock just north of Phewa Lake. One gets to see beautiful views of sunrise and sunset from Sarangkot as the sun splashes hues of red on the Himalayan range. On a clear day, the panoramic ranges of Annapurna, Dhaulagiri, Machhapuchhre and Ganesh Himal can be observed from her<br />
<br />
Later you will visit Bindebasini Temple. This is one of the oldest temples in Pokhara was a part of Kaski Kingdom, the main deity of the temple,Goddess Durga, was brought from India. Apart from the peace and tranquility that can be felt in this region, the premises of the temple offers a good view of the Himalaya on a clear day. The temple is in the area of the bazaar, hence,a journey of the old bazaar can be combined with a visit to the temple. Sightseeing to Devi’s fall, also known as Patale Chango is an awesome waterfall lying 2 km southwest of Pokhara. During summer and rainy season, the waterfall takes its real form, with gushing water splashing and making its way through the rocks. Just opposite of Devi’s fall, on the other side of the road, there is Gupteshwor Cave. This cave is popular for the different natural forms made from limestone deposits. Photography is strictly prohibited inside the cave. Overnight at 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 5:</b> Pokhara - Nagarkot
								</p>
								<p class="aj">Drive back to Kathmandu. Continue drive to to Nagarkot. Nagarkot is situated 32 kilometers, 1.5 hrs drive east of Kathmandu at an altitude of 2,175 meters. The panoramic view of the major peaks including Mt. Everest can be seen from here. This place is also famous for viewing sunrise and sunset. Overnight at 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 6:</b> Nagarkot Airport
								</p>
								<p class="aj">Drive staright to the airport which is 1.5 hours drive approx to board flight for 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>
																		<li>Transport</li>
																		<li>Transfers</li>
															</ul>
						<br />
												<p class="large b mb5px dif">Exclusions :</p> <ul><li>Services Other Than Specified.</li><li>
Entrance Fee At The Monumental Sites During The Sightseeing.</li><li>
Guide During The Sightseeing.</li><li>
If There Is Any Domestic Flight Been Taken There Is An Airport Tax Of Inr 125 Pp Each Time Taking The Flight Payable.</li><li>
Directly At The Airport At The Time Of Check In. This Cannot Be Included In The Proposal.Any Expenses Of Personal Nature Such As Drinks, Laundry, Telephone/Fax Calls.</li><li>
Any Expenses Caused By Reasons Beyond Our Control Such As Flight Delays, Rescheduling Or Cancellations, Any Accidents,</li><li>
Medical Evacuations, Riots, Strikes, Etc.</li><li>
Any Tips To Drivers, Hotel Staff, Any Meals Apart From The Ones Mentioned Above.</li><li>
Any Other Tax Or Service Charge That Could Be Enforced During This Period Will Be Extra & Need To Borne By You.</li><li>
Inr 1000 And 500 Demonitation Indian Notes Are Banned In Nepal. The Clients Should Be Informed Of This.</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">Packages Details</p>
		<div class="dynamic-data-container">
    	<table class="bdrAll" width="100%" cellpadding="5">
			<tr>
				<td class="data p5px">Per person on twin sharing basis.</td>
				<td class="data p5px">N.A.</td>
				<td class="data p5px">N.A.</td>
			</tr>
			<tr>
				<td class="data p5px">Child With Bed</td>
				<td class="data p5px">N.A</td>
				<td class="data p5px">N.A.</td>
			</tr>
			<tr>
				<td class="data p5px">Child No Bed</td>
				<td class="data p5px">N.A.</td>
				<td class="data p5px">N.A.</td>
			</tr>
			<tr>
				<td class="data p5px">Supplement MAP plan</td>
				<td class="data p5px">N.A.</td>
				<td class="data p5px">N.A.</td>
			</tr>
			<tr>
				<td class="data p5px">Supplement AP plan</td>
				<td class="data p5px">N.A.</td>
				<td class="data p5px">N.A.</td>
			</tr>
		</table></div><br>						</div>
												
						<div class="ac mb10px">
						<form name="frmpackagedetail" id="frmpackagedetail" method="post" action="http://www.skytriptraveleasy.com/enquiry-form-10002.htm">
						<input type="hidden" name="subject" value="Nepal - Nagarkot.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="21191"/>
						</form>
						</div>
						
						";i:1;s:60:"Book Nepal - Nagarkot.Tour - 5 Nights / 6 Days Tour Packages";i:2;s:128:"book nepal - nagarkot.tour - 5 nights / 6 days tour packages, heritage tour packages, kathmandu, pokhara, nagarkot tour packages";i:3;s:164:"Skytrip Travel Easy offers Nepal - Nagarkot.Tour - 5 Nights / 6 Days tour package, budget Heritage tour packages for Kathmandu, Pokhara, Nagarkot at exciting price.";i:4;s:1294:"
			<script type="application/ld+json">
		    {
		      "@context": "https://schema.org",
		      "@type": "TouristAttraction",
		      "address": {
		        "@type": "PostalAddress",
		         "addressRegion": "Kathmandu, Pokhara, Nagarkot"        
		                 },
		      "description": "Services Other Than Specified.
Entrance Fee At The Monumental Sites During The Sightseeing.
Guide During The Sightseeing.
If There Is Any Domestic Flight Been Taken There Is An Airport Tax Of Inr 125 Pp Each Time Taking The Flight Payable.
Directly At The Airport At The Time Of Check In. This Cannot Be Included In The Proposal.Any Expenses Of Personal Nature Such As Drinks, Laundry, Telephone/Fax Calls.
Any Expenses Caused By Reasons Beyond Our Control Such As Flight Delays, Rescheduling Or Cancellations, Any Accidents,
Medical Evacuations, Riots, Strikes, Etc.
Any Tips To Drivers, Hotel Staff, Any Meals Apart From The Ones Mentioned Above.
Any Other Tax Or Service Charge That Could Be Enforced During This Period Will Be Extra & Need To Borne By You.
Inr 1000 And 500 Demonitation Indian Notes Are Banned In Nepal. The Clients Should Be Informed Of This.",
		      "name": "Nepal - Nagarkot.Tour",
		      "telephone": "+91-9555999290"
		    }
		    </script>
			";i:5;N;}