a:6:{i:0;s:11993:"				<div class="h1"><h1>Majestic Dubai Package</h1></div>
				<p class="breadcrumb ar uu small"><a href="http://www.travelzonetoursandtravels.com/" title="Home">Home</a> 
				
									<b class="ffv p2px">&rsaquo;</b><a href="http://www.travelzonetoursandtravels.com/tour-packages.htm" title="Tour Packages">Tour Packages</a>  			
									
				<b class="ffv p2px">&rsaquo;</b>Majestic Dubai 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">Dubai, Abu Dhabi</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.travelzonetoursandtravels.com/enquiry-form-10002.htm">
						<input type="hidden" name="subject" value="Majestic Dubai 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="115944"/>
						</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_12/332124/188919.jpg"><img src="https://ttw.wlimg.com/package-images/photo-small/dir_12/332124/188919.jpg"  width="150" height="150"    alt="Majestic Dubai Package" title="Majestic Dubai 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> Arrival in Dubai - Abu Dhabi
								</p>
								<p class="aj">As you will arrive in Dubai, you will be received by our tour representative and further escorted to the city of Abu Dhabi. Upon reaching Abu Dhabi, guests would be transferred to one of our listed hotels. Relax in your cozy rooms as the rest of the day is at leisure. If you wish to explore the nearby surroundings and market, make sure you do that in the evening.<br />
<br />
Overnight in Abu Dhabi.</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> Abu Dhabi- City Tour and Ferrari World
								</p>
								<p class="aj">Right after the morning breakfast, guests would be embarked on a city tour of Abu Dhabi. This will include visit to the Grand Mosque. Rightfully named as the Sheikh Zayed Grand Mosque, the spectacular site is considered to be the most sacred in the country. Post this visit, you would be heading for a tour of the Ferrari World.<br />
<br />
Claimed to be world's largest Indoor theme park, the Ferrai world is located on the Yas Island in Abu Dhabi. The theme park is renowned for its unique rides that count to more than 20. From thrilling speed rides, stimulating rides to family friendly attractions, the indoor park suits tourists of all ages and tastes. Moreover, the theme park is also packed with a variety of Italian restaurants, international retail shops and entertainment joints.<br />
<br />
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 3:</b> Abu Dhabi- Dubai- Dhow Cruise
								</p>
								<p class="aj">Post breakfast, you would be transferred from Abu Dhabi to a hotel in Dubai. Rest of the day is to be spent at leisure, while the evenings are meant for a Dhow cruise ride along the beautiful Dubai Creek. As you would be gently cruising on the traditional wooden Dhow; wining and dining, spectacular views along the creek would be bound to pass by, making it a magical experience.<br />
<br />
The wooden Dhow would be cruising along the magnificently lit attractions of the city which include places like the National Bank of Dubai and the Chamber of Commerce Building. Guests would be served a sumptuous international buffet dinner. Post this cruise ride, return back to the hotel.<br />
<br />
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 4:</b> Dubai- City tour- Desert Safari tour
								</p>
								<p class="aj">After being done with the morning breakfast, guests would be picked up by our tour representative for a half day city tour of Dubai. Now it is your chance to discover the traditional side of modern Dubai. The tour will start with the visit to Palm Jumeirah, which is also famed as the eighth wonder of the world. While on your drive, make a halt for a quick photo session at the Atlantis hotel. Post that, continue on your course to the mosque. Built in the year 1979 in the style of Fatimi mosques of Egypt, the Palm Jumeirah is amongst the prominent structures of the city. As you would be done with the visit to the mosque, proceed towards the famous Sheikh Zayed Road to admire the tallest building in the world; Burj Khalifa tower from a long distance. Drive to the old parts of the city will pass through majestic palaces of the ruling family of Dubai. Next on the journey would be the visit to Al Fahidi fort and Dubai Museum. Al Fahidi fort is a prominent historic structure that is highly reminiscent of Dubai's illustrious past. Next in the itinerary would be the renowned gold and spice souk. Following it would be the visit to the souvenir shop. Here you can buy a lot of antiques, souvenirs and art & craft items. The city tour of Dubai will end with the final stoppage at the Burj Al Arab hotel. In the second half of the day, guests would be picked up to enjoy a desert safari that includes a BBQ dinner and an Arabic Belly Dance program for the evening. You would be starting first with a thumping ride in the desert right over the sand dunes. Amidst this roller coaster ride, you can stop for clicking pictures. Post this, you would be moving for a short visit to Ali's Camel Farm. Later on, you would be arriving at the pre-booked desert camp. Do catch the sight of the beautiful desert sunset. Guests would be given a traditional welcome with Arabic tea, coffee and dates, as they will make their arrival at the desert camp. Feel free to relax in the specially furnished Arabic tents while the traditional oven is lit in preparation of the dinner. You can even get a henna tattoo done or simply embark on a camel ride as the arrangements of the evening dance show and performance get fully done. To make it an unforgettable evening, the highlights will include a Tannoura dance show and a belly dance performance to the beats and rhythm of Arabia. On the other hand, the evening cuisines will comprise a sumptuous three course barbeque meal teamed up with a variety of salad and meat. Post dinner, you would be driven back to the city hotel for an 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- Snow Park Ski Dubai
								</p>
								<p class="aj">Post breakfast, guests would be leaving for skiing at the world's largest indoor snow park known as Ski Dubai. The park is built over a sprawling area of 3000 sq meters. Fully covered with snow, the park offers an ultimate family fun time. Get in your snow boots and enjoy the Tobogganing hills, the Twin Track Bobsled runs and the snow cavern. The snow park also offers a Giant Ball ride, for that you have to go to the top of the upgrade station. This point also offers a perfect bird's eye view of the whole snow park. Post all the fun, return to the comforts of your hotel. Overnight 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 6:</b> Depart Dubai
								</p>
								<p class="aj">This brings the end of our amazing Dubai tour. Enjoy your breakfast at the hotel after which you would be transferred to the Dubai International Airport for your onward journey back home. The tour ends here.</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.travelzonetoursandtravels.com/enquiry-form-10002.htm">
						<input type="hidden" name="subject" value="Majestic Dubai 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="115944"/>
						</form>
						</div>
						
						";i:1;s:61:"Book Majestic Dubai Package - 5 Nights / 6 Days Tour Packages";i:2;s:126:"book majestic dubai package - 5 nights / 6 days tour packages, forts and palaces tour packages, dubai, abu dhabi tour packages";i:3;s:169:"Book Majestic Dubai Package - 5 Nights / 6 Days tour packages from Travel Zone - Get attractive 5 Nights / 6 Days Forts and Palaces  tour packages for  Dubai, Abu Dhabi.";i:4;s:410:"
			<script type="application/ld+json">
		    {
		      "@context": "https://schema.org",
		      "@type": "TouristAttraction",
		      "address": {
		        "@type": "PostalAddress",
		         "addressRegion": "Dubai, Abu Dhabi"        
		                 },
		      "description": "",
		      "name": "Majestic Dubai Package",
		      "telephone": "+91-9932901938"
		    }
		    </script>
			";i:5;N;}