a:6:{i:0;s:11604:"				<div class="h1"><h1>Icehotel Winter Adventure Tour</h1></div>
				<p class="breadcrumb ar uu small"><a href="http://www.travelect.co.in/" title="Home">Home</a> 
				
									<b class="ffv p2px">&rsaquo;</b><a href="http://www.travelect.co.in/tour-packages.htm" title="Tour Packages">Tour Packages</a>  			
									
				<b class="ffv p2px">&rsaquo;</b>Icehotel Winter Adventure 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">Tour Code </td>
						<td class="p5px pl0px vat">014</td>
						</tr>
												<tr>
						<td class="b p5px w125px vat">Duration </td>
						<td class="p5px pl0px vat">
						3 Nights / 4 Days 
						</td>
						</tr>
												<tr>
						<td class="b p5px w125px vat">Destination Covered </td>
						<td class="p5px pl0px vat">Stockholm</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.travelect.co.in/enquiry-form-10002.htm">
						<input type="hidden" name="subject" value="Icehotel Winter Adventure 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="65354"/>
						</form>
						</p>
						</td>
						</tr>
											</table>
					</td>
											<td class="p10px vat imgWidth150 w150px lh0">
						<div class="demo-wrap">
						<ul class="lsn m0px p0px" id="detailslider1">
															<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_12/333350/120278.jpg"><img src="https://ttw.wlimg.com/package-images/photo-small/dir_12/333350/120278.jpg"  height="150"  width="150"    alt="Icehotel Winter Adventure Tour" title="Icehotel Winter Adventure Tour" /></a></p></div></li>
																		<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_12/333350/120279.jpg"><img src="https://ttw.wlimg.com/package-images/photo-small/dir_12/333350/120279.jpg"  height="150"  width="150"    alt="Icehotel Winter Adventure Tour" title="Icehotel Winter Adventure Tour" /></a></p></div></li>
																		<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_12/333350/120280.jpg"><img src="https://ttw.wlimg.com/package-images/photo-small/dir_12/333350/120280.jpg"  height="150"  width="150"    alt="Icehotel Winter Adventure Tour" title="Icehotel Winter Adventure Tour" /></a></p></div></li>
																		<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_12/333350/120281.jpg"><img src="https://ttw.wlimg.com/package-images/photo-small/dir_12/333350/120281.jpg"  height="150"  width="150"    alt="Icehotel Winter Adventure Tour" title="Icehotel Winter Adventure Tour" /></a></p></div></li>
																		<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_12/333350/120282.jpg"><img src="https://ttw.wlimg.com/package-images/photo-small/dir_12/333350/120282.jpg"  height="150"  width="150"    alt="Icehotel Winter Adventure Tour" title="Icehotel Winter Adventure 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> Welcome To Kiruna, Lapland
								</p>
								<p class="aj">Arrive at Kiruna airport, where you are met and greeted. After collecting your luggage you will receive warm clothes and boots to protect you from the cold on your first arctic adventure. Just outside the airport your transport awaits, a dogsled team which will take you for an exciting ride through the wild and over the plains towards the Icehotel. The guide will mush a team of 10-12 dogs and you sit up to 4 people on one big sled. During the tour we will also make a stop to enjoy some light refreshments around the fire. What a way to start your holiday in true Lapland style!<br />
On arrival to the ICEHOTEL complex you will be taken on a guided tour to learn the story of its unique concept. The original ICEHOTEL structure is entirely rebuilt each winter with snow and ice blocks from the nearby Torne River, and the new permanent ICEHOTEL 365 structure - equipped with large solar panels for year-round indoor cooling –is furnished with similar snow and ice designs inside.<br />
Regardless of whether you spend the night in the new or original structure, the temperature inside is kept at around - 5°C (21°F) at all times. But no worries! You will receive a thermal sleeping bag to keep you warm and handy tips from ICEHOTEL staff on how to sleep comfortably in your own ice room on soft reindeer skins atop a bed made of ice.<br />
Regarding flights to/from Kiruna: Please note that there are no flights to/from Kiruna on December 24th, 25th and 31st. We can however add extra nights to your preferred package if needed.</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> Quest For The Northern Lights
								</p>
								<p class="aj">In the morning you will wake up to find a cup of hot traditional lingonberry juice served at your bedside. Once properly awake you can enjoy a hearty breakfast in the restaurant and warm up in the Icehotel’s sauna to prepare for today’s adventures. You have the whole day to explore the area around the Icehotel and the frozen river Torne, located a stone´s throw from the ICEHOTEL. In the evening, you will be picked up and taken on a journey into the wild to explore the amazing Northern Lights on a guided snowmobile trip. Two people share one snowmobile and take turns in driving. After a delicious dinner you head into the night again and return to your warm hotel.<br />
For the next two nights you will be staying in a warm room in Kiruna.<br />
<br />
* Please note that the Northern Lights (Aurora Borealis) are a natural phenomenon and therefore a sighting cannot be guaranteed</p>					
									<p><b>Meals : </b> Breakfast</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> Open Day
								</p>
								<p class="aj">You have all day to explore the town of Kiruna, or take an optional excursion. Here are some suggestions:<br />
Visit to a Sami reindeer farm<br />
This tour takes you to a Sami reindeer farm for a close encounter with Rudolph and his furry friends, followed by a traditional snack in a Sami tent. Try your hand at driving a sled pulled by reindeer. At the farm you will get a special chance to learn about the daily lives and history of the Sami people, the native people of northern Scandinavia. Please contact us for more information.<br />
Safari by Snowmobile<br />
This is your chance to explore the magnificent mountains and Arctic forests of Lapland one of the most beautiful places in Sweden! You are taken by bus to Nikkaluokta, where the tour continues by snowmobile in search of the majestic moose. Along the way, there will be a break to enjoy an authentic Lappish lunch with the tour leader and fellow travellers in a wilderness hut. You will also get to try ice fishing. Please contact us for more information.</p>					
									<p><b>Meals : </b> Breakfast</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> Departure
								</p>
								<p class="aj">Transfer to Kiruna airport. If you leave in the afternoon you might want to take some time to explore Kiruna on your own and do some last minute souvenir shopping.</p>					
									<p><b>Meals : </b> Breakfast</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>
															</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.travelect.co.in/enquiry-form-10002.htm">
						<input type="hidden" name="subject" value="Icehotel Winter Adventure 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="65354"/>
						</form>
						</div>
						
						";i:1;s:69:"Book Icehotel Winter Adventure Tour - 3 Nights / 4 Days Tour Packages";i:2;s:124:"book icehotel winter adventure tour - 3 nights / 4 days tour packages, lakes & rivers tour packages, stockholm tour packages";i:3;s:180:"Book Icehotel Winter Adventure Tour - 3 Nights / 4 Days tour packages from El Travel Elect Pvt. Ltd - Get attractive 3 Nights / 4 Days Lakes & Rivers  tour packages for  Stockholm.";i:4;s:411:"
			<script type="application/ld+json">
		    {
		      "@context": "https://schema.org",
		      "@type": "TouristAttraction",
		      "address": {
		        "@type": "PostalAddress",
		         "addressRegion": "Stockholm"        
		                 },
		      "description": "",
		      "name": "Icehotel Winter Adventure Tour",
		      "telephone": "+91-9225503370"
		    }
		    </script>
			";i:5;N;}