a:6:{i:0;s:13606:"				<div class="h1"><h1>6N/7D Austria Tour</h1></div>
				<p class="breadcrumb ar uu small"><a href="http://www.bellatours.co.in/" title="Home">Home</a> 
				
									<b class="ffv p2px">&rsaquo;</b><a href="http://www.bellatours.co.in/tour-packages.htm" title="Tour Packages">Tour Packages</a>  			
									
				<b class="ffv p2px">&rsaquo;</b>6N/7D Austria 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">
						6 Nights / 7 Days 
						</td>
						</tr>
												<tr>
						<td class="b p5px w125px vat">Destination Covered </td>
						<td class="p5px pl0px vat">Innsbruck, Vienna, Salzburg</td>
						</tr>
												<tr>
						<td class="b p5px w125px vat">Price (Starting From) </td>
						<td class="p5px pl0px vat">
						INR 47310 Per Person						</td>
						</tr>
												<tr>
						<td class="b p5px dif w125px vat">Special Offer </td>
						<td class="p5px pl0px dif vat">Special Offer 	<br />
1st 50 people get BELLA TOURS bag</td>
						</tr>
												<tr>
						<td></td>
						<td>
						<p>
						<form name="frmpackagedetail" id="frmpackagedetail" method="post" action="http://www.bellatours.co.in/enquiry-form-10002.htm">
						<input type="hidden" name="subject" value="6N/7D Austria 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="91763"/>
						</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/397488/157878.jpg"><img src="https://ttw.wlimg.com/package-images/photo-small/dir_14/397488/157878.jpg"  width="150" height="150"    alt="6N/7D Austria Tour" title="6N/7D Austria Tour" /></a></p></div></li>
															</ul>
						</div>
						</td>
											</tr>
					</table>
					</div>
					<br />
					
					2 Nights in Innsbruck with Breakfast <br />
2 Nights in Salzburg with Breakfast<br />
2 Nights in Vienna with Breakfast<br />
Swarovski Crystal World on SIC<br />
Mozart City Tour and Lakes & Mountains on SIC <br />
Vienna city Tour and Schonbrunn Palace on SIC <br />
Return airport transfers on private basis<br />
2nd Class Austria 3D/1M Saver Pass<br />
{Note: - Kindly be on time for SIC transfer as coach will not wait for more than the confirmed pick up time and there will be no refund provided for missed transfers}Special Offer 	<br />
1st 50 people get BELLA TOURS bagAirfare & Taxes<br />
Visa & Insurances charges<br />
Any up gradation in hotel room category<br />
Any meals other than specified above<br />
Any sightseeing other than mentioned above<br />
Any Entrance fees or Fees for video or camera permit<br />
Any item of personal nature like tips, laundry, telephone calls etc<br />
Service tax will be applicable on total invoice17-0731-12<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> Arrive in Vienna - Innsbruck
								</p>
								<p class="aj">Welcome to Austria. Arrive at airport and transfer Innsbruck. Check in at the hotel. You have rest of day at leisure. Overnight stay in Innsbruck.</p>
								</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 <? echo $p_class; ?>"><a rel="gall" data-fancybox="showZoomImage" href="https://ttw.wlimg.com/package-images/photo-big/dir_14/397488/157878.jpg"><img src="https://ttw.wlimg.com/package-images/photo-small/dir_14/397488/157878.jpg"  width="150" height="150"    alt="6N/7D Austria Tour" title="6N/7D Austria Tour" /></a></p></div></li>
									</ul>
									</div>
									</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> Innsbruck - Swarovski Crystal World
								</p>
								<p class="aj">Today after breakfast, enjoy a unique visit to the amazing and sparking newly renovated world of Crystals, created for you by Swarovski! After re-opening in April 2015 the Swarovski Crystal World is more breathtaking than ever. Overnight stay in Innsbruck.</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> Innsbruck - Salzburg
								</p>
								<p class="aj">Today after breakfast check out from hotel & transfer to Salzburg. Arrive and check in at hotel. Discover Salzburg on your own in the afternoon and enjoy the famous shopping street Getreidegasse. Overnight stay in Salzburg.</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> Salzburg - Mozart City Tour and Lakes and Mountains
								</p>
								<p class="aj">This morning proceed to enjoy an interesting tour of Salzburg and discover the beauty and contrasting scenery of the picturesque Austrian countryside. The first part of the tour starts at Mirabell Palace. Next we pass by Mozarteum and the Marionette Theatre. Further along we see the County Theatre, Mozart's Residence and Trinity Church. We cross the river Salzach and pass the Law Courts on our way to Hellbrunn Palace having a short stop here. Returning to Salzburg we pass by Frohnburg Palace, Nonnberg Abbey, the Neutor tunnel, the Horsepon and St. Blasius church before we reach Mozart square. The second part of the tour starts at 2 p.m. from Salzburg Sightseeing Office and shows you the scenic surroundings of the city of Salzburg. In St. Gilgen we see the birthplace of Mozarts' mother. Enjoy the atmosphere in St. Wolfgang with the renowned White Horse Inn, where we admire the church with its famous altar and where we have a boat trip across St Wolfgang Lake during summer period. We also shortly stop in Mondsee on our return. Overnight stay in Salzburg.</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> Salzburg - Vienna
								</p>
								<p class="aj">Today after breakfast check out fr.om hotel & transfer to Vienna. Arrive and check in at hotel. Overnight stay in Innsbruck.</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> Vienna - City Tour with Schonbrunn Palace
								</p>
								<p class="aj">Breakfast at the hotel. Take a tour of the main sights within the city centre and visit the magnificently decorated rooms of Schonbrunn Palace.This city tour will introduce you to the the most important sights of the Austrian capital. As we drive around the famous 'Ringstrasse', Vienna's main boulevard, we pass by the State Opera, the Museums of Fine Art and Natural History, the Parliament building, the Burgtheater (National Theatre), the City Hall and the University. The highlight of this programme is the visit to Schonbrunn Palace where we take a tour of some of the most magnificently decorated rooms. We return to the city centre, passing by Belvedere Palace, where you will have the opportunity to end your tour, or you can choose to continue to the State Opera House, where the tour ends.Overnight stay in Vienna.</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> Vienna- Departure
								</p>
								<p class="aj">After breakfast it’s time to check out.Transfer to the airport for your onward flight or back home.</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>3 Star Hotel</li>
																		<li>Sightseeing</li>
																		<li>Transport</li>
																		<li>Transfers</li>
																		<li>Airport Pickup-Drop</li>
															</ul>
						<br />
												<p class="large b mb5px dif">Exclusions :</p> <ul><li>Airfare & Taxes</li><li>
Visa & Insurances charges</li><li>
Any up gradation in hotel room category</li><li>
Any meals other than specified above</li><li>
Any sightseeing other than mentioned above</li><li>
Any Entrance fees or Fees for video or camera permit</li><li>
Any item of personal nature like tips, laundry, telephone calls etc</li><li>
Service tax will be applicable on total invoice</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">Hotel Details:-</p>
		<div class="dynamic-data-container">
    	<table class="bdrAll" width="100%" cellpadding="5">
			<tr>
				<td class="headHr p5px b">City</td>
				<td class="headHr p5px b">Standard</td>
				<td class="headHr p5px b">Deluxe</td>
			</tr>
			<tr>
				<td class="data p5px">Innsbruck</td>
				<td class="data p5px">Ramada Tivoli / Weisses Kreuz or similar</td>
				<td class="data p5px">Alphotel /  Innsbruck or similar</td>
			</tr>
			<tr>
				<td class="data p5px">Salzburg</td>
				<td class="data p5px">Hohenstauffen/Hofwirt or similar</td>
				<td class="data p5px">Der Salzburger Hof or similar</td>
			</tr>
			<tr>
				<td class="data p5px">Vienna</td>
				<td class="data p5px">Allegro/ Admiral or similar</td>
				<td class="data p5px">Zeitgeist / Mercure Westbahnhof or similar</td>
			</tr>
		</table></div><br>
    	<p class="h dif xlarge b mb5px">Price per person in EUR:-</p>
		<div class="dynamic-data-container">
    	<table class="bdrAll" width="100%" cellpadding="5">
			<tr>
				<td class="headHr p5px b">Category</td>
				<td class="headHr p5px b">Twin</td>
				<td class="headHr p5px b">Twin</td>
			</tr>
			<tr>
				<td class="data p5px">Standard</td>
				<td class="data p5px">664</td>
				<td class="data p5px">1010</td>
			</tr>
			<tr>
				<td class="data p5px">Deluxe</td>
				<td class="data p5px">734</td>
				<td class="data p5px">1155</td>
			</tr>
		</table></div><br>						</div>
												
						<div class="ac mb10px">
						<form name="frmpackagedetail" id="frmpackagedetail" method="post" action="http://www.bellatours.co.in/enquiry-form-10002.htm">
						<input type="hidden" name="subject" value="6N/7D Austria 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="91763"/>
						</form>
						</div>
						
						";i:1;s:57:"Book 6N/7D Austria Tour - 6 Nights / 7 Days Tour Packages";i:2;s:124:"book 6n/7d austria tour - 6 nights / 7 days tour packages, heritage tour packages, innsbruck, vienna, salzburg tour packages";i:3;s:167:"Book 6N/7D Austria Tour - 6 Nights / 7 Days tour packages from Bella Tours - Get attractive 6 Nights / 7 Days Heritage  tour packages for  Innsbruck, Vienna, Salzburg.";i:4;s:1299:"
			<script type="application/ld+json">
		    {
		      "@context": "https://schema.org",
		      "@type": "TouristAttraction",
		      "address": {
		        "@type": "PostalAddress",
		         "addressRegion": "Innsbruck, Vienna, Salzburg"        
		                 },
		      "description": "2 Nights in Innsbruck with Breakfast 
2 Nights in Salzburg with Breakfast
2 Nights in Vienna with Breakfast
Swarovski Crystal World on SIC
Mozart City Tour and Lakes & Mountains on SIC 
Vienna city Tour and Schonbrunn Palace on SIC 
Return airport transfers on private basis
2nd Class Austria 3D/1M Saver Pass
{Note: - Kindly be on time for SIC transfer as coach will not wait for more than the confirmed pick up time and there will be no refund provided for missed transfers}Special Offer 	
1st 50 people get BELLA TOURS bagAirfare & Taxes
Visa & Insurances charges
Any up gradation in hotel room category
Any meals other than specified above
Any sightseeing other than mentioned above
Any Entrance fees or Fees for video or camera permit
Any item of personal nature like tips, laundry, telephone calls etc
Service tax will be applicable on total invoice17-0731-12",
		      "name": "6N/7D Austria Tour",
		      "telephone": "+91-9819406969"
		    }
		    </script>
			";i:5;N;}