a:6:{i:0;s:11727:"				<div class="h1"><h1>Magical Dubai Tour</h1></div>
				<p class="breadcrumb ar uu small"><a href="http://www.rajastravels.com/" title="Home">Home</a> 
				
									<b class="ffv p2px">&rsaquo;</b><a href="http://www.rajastravels.com/tour-packages.htm" title="Tour Packages">Tour Packages</a>  			
									
				<b class="ffv p2px">&rsaquo;</b>Magical Dubai 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">Dubai</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.rajastravels.com/enquiry-form-10002.htm">
						<input type="hidden" name="subject" value="Magical Dubai 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="79272"/>
						</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_13/370602/139593.jpg"><img src="https://ttw.wlimg.com/package-images/photo-small/dir_13/370602/139593.jpg"  height="150"  width="150"    alt="Magical Dubai Tour" title="Magical Dubai 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> Arrive Dubai
								</p>
								<p class="aj">Magical Dubai tour starts the moment you arrive in the Dubai International Airport. A local representative shall greet you with warm welcome. Get assistance for transfer and escort to one of our listed hotels in Dubai. Check-in at the hotel. Enjoy the lavish comforts of your room and hotel. Day is free for leisure. Get ready to be dazzled by the exciting metropolis. The charm of Dubai shall definitely take your breath away. Overnight stay in Dubai.</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> Dubai – Yas Water Park & Ferrari World Amusement Park
								</p>
								<p class="aj">Start you day with a delicious breakfast. Next, proceed for Yas Water Park and enjoy unlimited water rides. The thrilling water park is a fun getaway. Later in the afternoon visit the Ferrari World Amusement Park. The Park hosts more than 20 unique rides and attraction for visitors of all ages and interests. Every visitor in the park will find their own pleasure. Get spellbound by the speed thrill rides, the world's most advanced simulators and family friendly attractions. Apart from the spectacular delights, there is a wide variety to Italian restaurants, unique shopping experience and entertainment. After having a dose of wonderful fun return to 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 3:</b> Dubai - Aquaventure Water Park & Visit to Lost Chambers Aquarium
								</p>
								<p class="aj">Start the morning with a hearty breakfast. After your meal, proceed for Aquaventure Dubai. This enjoyment park is set in 42 acres teeming with fun rides. The thrilling choices in the amusement part include Master Blasters, speed slide, rivers, rapids, Splashes children, play area, lush tropical landscapes and a private beach. The experience is quite wonderful and some of the most fun memories in Dubai.<br />
<br />
Next you proceed to a place that is surely hard to believe. Imagine exploring the enigmatic ruins of Atlantis, lost in time, buried deep beneath the sea. Created on the theme of the mythical Atlantis, the Lost Chambers Aquarium looks up to see 65000 marine animals swimming in calm cerulean waters. Visitors can enjoy the experience of their own Atlantean adventure. The exquisite inhabitants of the underwater world, the maze of underwater halls and tunnels are a rare feat only available in Dubai. Return for overnight stay in 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> Dubai – Wild Wadi Park & Burj Khalifa Tour
								</p>
								<p class="aj">Start the day with a scrumptious meal at the hotel. Following breakfast, avail pick up from your hotel and proceed to the Wild Wadi Water Park. The exception amusement park offers an unforgettable adventure. Experience the delight of being the most advanced water theme park. Located between Burj Al Arab and Jumeirah Beach Hotel, get you mind blown with spectacular range of adventures. Experience the Tunnel of Doom, Tantrum Alley, Burj Surj, Wipe-out and Riptide Flow riders, Breakers' Bay, Juha Journey and others. There are thrilling rides that takes you twisting and turning through underground tunnels. Do not miss on the exhilaration of weightlessness on the 'Jumeirah Sceirah'. The speed slide hurtles down an incredible 100 feet into valley below.<br />
<br />
Later in the evening visit the majestic and unbelievable achievement of Dubai, the Burj Khalifa. The World tallest tower is incredible. The views from top of the tower is absolutely awe-inspiring. Visit the top of Burj Khalifa and walk into the sky. Experience first-hand this modern architectural and engineering marvel. The surroundings as far as you can see seem puny and inconsequential from such a lofty height. After a memorable day, return to 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 5:</b> Dubai – Desert Safari Tour
								</p>
								<p class="aj">Morning is at your leisure. Chose to relax, enjoy hotel facilities or to pursue independent activities. Relish the mouthwatering breakfast or avail the luxurious amenities of your hotel.<br />
<br />
Later in the day, avail the pick-up from your hotel to enjoy a safari in the desert. The desert safari tour includes a BBQ dinner & Belly Dance program in evening at end of the tour. The desert safari tour begins with an unforgettable roller coaster drive in the desert gliding over the magnificent Sand Dunes. Amid all the fun and action, do not forget to stop for pictures.<br />
<br />
Next you head towards Ali's camel farm for a short visit. After which proceed towards the desert camp with a stop en route to experience a memorable desert sunset. A traditional welcome awaits guests. Savor the exquisite palate of Arabic coffee and tea and dates. The traditional charcoal oven is lit in preparation for the delicious evening dinner. Relax in the Arabic tents furnished with carpets and pillows for your comfort. The campfire is also a good place to create wonderful memories of Dubai. Get a henna tattoo or experience an unforgettable camel ride. The highlight of the evening includes the Tannoura dance show and an exotic belly performance to the rhythmic beat of Arabia. The desert safari evening ends with a delicious three course barbeque meal with a variety of meats and salads served beneath the starlit skies, accompanied by authentic Arabic music. Recover from the magical experience in the comfort of your room during your 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 6:</b> Depart Dubai
								</p>
								<p class="aj">Today morning have a hearty breakfast. After this pack your bags and check-out. You will be transferred to Dubai International Airport for your flight back home. Return home with cherished memories of the breathtaking Dubai.</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.rajastravels.com/enquiry-form-10002.htm">
						<input type="hidden" name="subject" value="Magical Dubai 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="79272"/>
						</form>
						</div>
						
						";i:1;s:57:"Book Magical Dubai Tour - 5 Nights / 6 Days Tour Packages";i:2;s:111:"book magical dubai tour - 5 nights / 6 days tour packages, forts and palaces tour packages, dubai tour packages";i:3;s:156:"Book Magical Dubai Tour - 5 Nights / 6 Days tour packages from RAJAS TRAVELS - Get attractive 5 Nights / 6 Days Forts and Palaces  tour packages for  Dubai.";i:4;s:395:"
			<script type="application/ld+json">
		    {
		      "@context": "https://schema.org",
		      "@type": "TouristAttraction",
		      "address": {
		        "@type": "PostalAddress",
		         "addressRegion": "Dubai"        
		                 },
		      "description": "",
		      "name": "Magical Dubai Tour",
		      "telephone": "+91-9820123553"
		    }
		    </script>
			";i:5;N;}