a:6:{i:0;s:14383:"				<div class="h1"><h1>Mysore Ooty & Coorg 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>Mysore Ooty & Coorg 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">
						8 Nights / 9 Days 
						</td>
						</tr>
												<tr>
						<td class="b p5px w125px vat">Destination Covered </td>
						<td class="p5px pl0px vat">Mysore, Srirangapatna, Ooty, Kodagu</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="Mysore Ooty & Coorg 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="58157"/>
						</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/333350/110196.jpg"><img src="https://ttw.wlimg.com/package-images/photo-small/dir_12/333350/110196.jpg"  width="150" height="150"    alt="Mysore Ooty & Coorg Tour" title="Mysore Ooty & Coorg 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> Mysore
								</p>
								<p class="aj">Mysore (or Mysuru) was the capital of the Kingdom of Mysore from 1399-1947. In its center is opulent Mysore Palace, former seat of the ruling Wodeyar dynasty. The palace blends Hindu, Islamic, Gothic and Rajput styles, and is dramatically lit at night. Mysore is also home to the centuries-old Devaraja Market, filled with spices, silk and sandalwood<br />
<br />
Proceed for Sightseeing. Visit Chamundi Hills to pay your obeisance to Goddess Chamundeshwari. On the way back to city you will see Statue of Mahishasura and Nandi. Pay a visit to Lalith Mahal Palace Hotel. And later visit Jaganmohan Palace Art Gallery. After lunch you will visit Mysore Palace, one of the largest palaces in the country and the beautiful St.Philomena's Church - the most majestic churches in India. Later drive to Brindavan Gardens a show garden that has botanical park with fountains as well as a musical fountain. Overnight stay at 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 2:</b> Mysore
								</p>
								<p class="aj">After breakfast, visit and the Mysore Zoo, one of the oldest and well maintained zoo in India. And also visit Karanji Lake, a picturesque lake located at the footsteps of Chamundi Hills. Later drive to Srirangapatna were you will visit Ranganathittu Bird Sanctuary, Sri Ranganatha Swamy Temple, Tipu's Summer Palace, fort, Gumbuz and Nimishamba Temple. 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> Ooty
								</p>
								<p class="aj">Ootacamund or Ooty, the popular hill station located in the Nilgiri Hills. Located in the Blue Mountains of the Western Ghats, Ooty greets a tourist with lofty mountains, great lakes, dense forests, sprawling grasslands, miles of tea gardens and eucalyptus trees. The hill station itself is a land of picturesque picnic spots. It used to be popular summer and weekend getaway for the British. Arrive in Ooty and check in to Hotel. Evening sightseeing of Ooty covering Botanical Garden & Boat ride in Ooty Lake (direct payment). Ootyâ€™s Botanical Gardens, established in 1848, are living showcase of the natural flora of Nilgiris including the 20 million years old fossilized tree trunks. Ooty is a great place to shop for home-made chocolates and essential oils. Overnight in Ooty.</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> Ooty sightseeing
								</p>
								<p class="aj">Early morning after breakfast, go for Ooty sightseeing. See the highest viewpoint of the Nilgiris, Doddabetta Peak (2633 m); St. Stephenâ€™s Church â€“ the 1829 Church is perched above the town and has noticeable stained glass, huge beams hauled by elephants from the palace of Tipu Sultan and the slabs & plaques donated by churchgoers; Rose garden, one of the largest in India and; the Wax Museum that houses life-size wax statues of Indian personalities; Thread Garden â€“ where around 150 species of plants from around the world are recreated with hand-woven thread. Keep in mind, Ooty is a great place to stock up on home-made chocolates and essential oils. Overnight in Ooty.</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> Coonoor
								</p>
								<p class="aj">Coonoor :  Situated at an altitude of 200 ft above the seal level and 17 Km froms Udhagamandalam, is the first of the popular Hill Stations. Coonoor is a small town with an equitable climate that has made it popular as a hill resort in its own right. The main attraction is the Sims Park, a small well-maintained Botanical Garden that houses several varieties of plants found missing in the other Hill Stations. View points and picnic spots around Coonoor include Lambs Rock, Lady Cannings Seat, Dolphins Nose, St.Catherine Falls, Lawâ€™s Falls, Ralliah Dam and Droog.<br />
Full day excursion to Coonoor (25 kms) visit tea plantations, Catherine falls, Dolphin's Nose, Sim's park, and various other viewpoints. Overnight Stay at Ooty.</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> Coorg
								</p>
								<p class="aj">Coorg or Kodagu is a district in Karnataka and Madikeri is the district headquarters. At an altitude of 1525 meters on Western Ghats, it is also known as the Scotland of India. Coorg is the most famous hill station in Karnataka. According to Puranas, Kodava is the redefined name of Krodhadesa meaning Land of Anger, said to have been inhabited by the Kodava tribe. Some historians believe that it is named after the River Cauvery. Coorg was under the Gangas rule during 9th and 10th centuries and Cholas in the 11th century followed by Hoysalas. Later Coorg was relatively independent under Haleri Rajas until British occupied the region in 1834. Coorg was a separate state before its merger with Karnataka in the year 1956.<br />
Coorg is the largest producer of Coffee in India. Also, it is one of the places with highest rainfall in India. The Kodagu district comprises different communities like Kodava, Tulu, Gowda and Moplah out of which the largest is the Kodava community, both economically and politically. The economy depends on agriculture, coffee plantations, forestry and tourism.<br />
<br />
Later proceed to visit Abbey falls-Tucked away between private coffee and spice estates, Abbey Falls offers a splendid backdrop for picnics. Madikeri Fort - The 19th century Madikeri fort with its stone ramparts now houses the prison, a temple, a chapel, a small museum, and assorted government offices, Omkareshwara Temple-Just a stone's throw away from the Madikeri Fort is the Omakareshwara Temple, built in 1820 and featuring a blend of red-tile roofed Kerela architecture and Islamic-style domes. Evening visit Raja Seat- is an enchanting picnic spot with a swathing in the nature's lap. A visitor to this spot is sure to enjoy the marvelous sight of Sun set and gorgeous valley and mountain ranges. Musical fountain has been attracting a large number of visitors to the garden. Return to hotel and overnight.</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> Coorg
								</p>
								<p class="aj">Early breakfast proceed to Dubare elephant camp (to reach the place before 09.00Hrs) offer the 3 hour experience with Elephants consisting of elephant Grooming, feeding, elephant Ride & Coracle Ride,  later visit Cauvery Nisargadhama - is an island formed by river Cauvery and is used as a picnic spot island, with lush foliage of thick bamboo groves, sandalwood and teak trees and surrounded by the Cauvery river. The island is accessible through a hanging rope bridge. Lunch at Kushalnagar and later visit Bylakuppe - largest Tibetan settlement in South India. A beautiful Monastery with three large and imposing Golden Buddha statues and in a serene setting beckons you. The temple has 62 feet Buddha statues covered with gold plates is a wonderful sight anytime. Back to Hotel. 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 8:</b> Bangalore
								</p>
								<p class="aj">Bangalore, the capital city of Karnataka, founded in 1537 by a local Chieftain Kempe Gowda. Bangalore is special in every respect - a Salubrious Climate, Beautiful parks, Avenues, Old and New Buildings, Museum, Theatre, above all the Cultured People - a standing testimony for Secular INDIA.<br />
Proceed for half day city tour, visit Lalbagh - This expanse of greenery is one of India`s most beautiful botanical gardens. Bull temple - The gigantic image of the celestial bull, Nandi, which stands at 4.57 meters. in height, is a classic example of Dravidian architecture. Return to hotel and 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 9:</b> Departure
								</p>
								<p class="aj">Drop At: Bangalore Railway Station.</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>
															</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="Mysore Ooty & Coorg 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="58157"/>
						</form>
						</div>
						
						";i:1;s:63:"Book Mysore Ooty & Coorg Tour - 8 Nights / 9 Days Tour Packages";i:2;s:136:"book mysore ooty & coorg tour - 8 nights / 9 days tour packages, valley tour packages, mysore, srirangapatna, ooty, kodagu tour packages";i:3;s:192:"Book Mysore Ooty & Coorg Tour - 8 Nights / 9 Days tour packages from El Travel Elect Pvt. Ltd - Get attractive 8 Nights / 9 Days Valley  tour packages for  Mysore, Srirangapatna, Ooty, Kodagu.";i:4;s:431:"
			<script type="application/ld+json">
		    {
		      "@context": "https://schema.org",
		      "@type": "TouristAttraction",
		      "address": {
		        "@type": "PostalAddress",
		         "addressRegion": "Mysore, Srirangapatna, Ooty, Kodagu"        
		                 },
		      "description": "",
		      "name": "Mysore Ooty & Coorg Tour",
		      "telephone": "+91-9225503370"
		    }
		    </script>
			";i:5;N;}