function interface(){

	var interface = this;
	
	interface.init = function(){
		interface.navigation();
		interface.forms();
		interface.qRes();
		interface.rotator();
		interface.phototour();
		interface.readMore();
		interface.gnav();
	};

//

	interface.gnav = function() {
	
		var config = {
			speed: 100,
			sensitivity: 50		
		};
	
		var $anchors = $("a.pgMN");

		$anchors.each(function(){
			var $anchor = $(this);
			var rel = $anchor.attr("rel");
			var	$container = $(rel);

			$anchor.hover(
				function(){
					$.doTimeout( rel ); // cancel the timeout
					panel.open();
				},			
				function(){
					$.doTimeout( rel, config.sensitivity, function(){
						panel.close();
					});				
				}		
			);	

			$container.hover(			
				function(){
					$.doTimeout( rel ); // cancel the timeout			
				},			
				function(){
					$.doTimeout( rel, config.sensitivity, function(){
						panel.close();
					});			
				}
			);
		
	
			var panel = {
				open : function() {
					$anchor.addClass("active");
					$container.show();
				},			
				close: function() {
					$anchor.removeClass("active");
					$container.hide();
				}		
			};

		
		});	
	
	
	};


//

	interface.navigation = function() {
		
		var config = {
			speed: 100,
			sensitivity: 50		
		};
	
		var $nav = $("ul#mainNav");
		var $anchors = $("ul#mainNav li a.sl");
		var $container = $("#slNav");
		var $list;
		var $active;

		$anchors.hover(
			function(){
				$.doTimeout( 'panel' ); // cancel the timeout
				$active = $(this);
				$list = $($(this).attr("rel"));
				fn.panel.open();
				fn.links.show();
			},			
			function(){
				fn.links.hide();
				$.doTimeout( 'panel', config.sensitivity, function(){
					fn.panel.close();
				});				
			}		
		);	
		
		
		$container.hover(			
			function(){
				fn.parent.activate();
				fn.links.show();
				$.doTimeout( 'panel' ); // cancel the timeout			
			},			
			function(){
				fn.parent.reset();
				fn.links.hide();
				$.doTimeout( 'panel', config.sensitivity, function(){
					fn.panel.close();
				});			
			}
		);
		
		
		
	
		var fn = {
			links : {
				show : function() {
					$list.show();
				},			
				hide : function() {
					$list.hide();
				}
			},
			panel : {
				open : function() {
					$container.fadeIn(config.speed).data("open", true);
				},			
				close: function() {
					$container.fadeOut(config.speed).data("open", false);
				}		
			},
			parent : {
				activate : function(){
					$anchors.removeClass("active");					
					$active.addClass("active");
				},
				reset : function(){
					$anchors.removeClass("active");
				}		
			}
		};
		
	
	};		
	
	
// 	

	interface.forms = function() {
	
			$("input.date").datepicker({
				minDate: 1, 
				maxDate: "+1Y", 
				numberOfMonths: 1,
				showButtonPanel: true
			});		
			
			$("select.spicy").spicyselect();	
	
	};

//

	interface.qRes = function(){
		
		var config = {
			speed : 300,
			easing : 'swing'
		};
		
		var $container = $("#reservations").data("open",true);
		var $form = $("form#qRes");
		var $toggle = $("#qResToggle");		
		
		var cHeight = 43 +"px";
		var oHeight = $container.height() +"px" ;
	
		
		$toggle.click(function(e){
			e.preventDefault();
			if( ! $container.data("open") ) {
				open();
			}
			else {
				close();
			}			
		});
	
		function open(){
			$container.animate(
				{height: oHeight},
				config.speed, config.easing, function(){
					$form.fadeIn(200);
					$container.data("open",true);		
					$toggle.removeClass("closed").addClass("open");				
				}
			);
		}
		
		function close(){
			$form.fadeOut(200);
			$container.animate(
				{height: cHeight},
				config.speed, config.easing, function(){
					$container.data("open",false);		
					$toggle.removeClass("open").addClass("closed");
				}
			);
		}
		
	};	
	
//

	interface.rotator = function() {
		
		var cconfig = {
	    fx:     'scrollRight', 
	    speed:  750,
	    timeout: 3000, 
			containerResize : 0
		};		
		
		var $rotator = $('#offersRotator');
		var $offer = $(window).data("open",false);
		var $expanded;
		
		if($rotator.length > 0 ){
			cycle();
		}
		
		function cycle(){

			$rotator.cycle(cconfig);	
			
			$rotator.hover(
				function(){
					$rotator.cycle('pause');
				},
				function() {
					if( ! $offer.data("open") ) {
						$rotator.cycle('resume');
					}
				}			
			);
			
			
			$('#expandedOffers').mouseenter(function(){
				$rotator.cycle('pause');
			});
			
	
			$('.expandOffer').click(function(e){
				e.preventDefault();		
				$offer = $(this).parents(".offer");
				$expanded = $($(this).attr("href"));
				expand();
			});
			
			$('.openOffer').click(function(e){
				e.preventDefault();		
				$offer = $(this).parents(".offer");
				$expanded = $($(this).attr("href"));
				expand();
			});			
			
			
			$('.closeOffer').click(function(e){
				e.preventDefault();		
				$expanded = $(this).parents(".offerExpanded");
				close();
			});
			
			
			function expand(){
				$("#ptExpanded").data("open", false).fadeOut();
				$("#ptExpand").removeClass("active");						
				$rotator.cycle('pause');
				$expanded.fadeIn(200).addClass("openExpanded");		
				$offer.addClass("open").data("open",true);		
			}
			
			function close(){
				$rotator.cycle('resume');
				$expanded.fadeOut(200).removeClass("openExpanded");		
				$offer.removeClass("open").data("open",false);		
			}
		}
	
	};


//
	
	interface.phototour = function() {

		var config = {
			speed : 400,
			frequency: 4000
		};
		
		var $nav = $("#ptNav");
		var $images = $("#ptContainer img");
		var $imgData = $("#ptData");	
		var $prev = $("#ptPrev");
		var $next = $("#ptNext");
		var $expand = $("#ptExpand");
		var $expansion = $("#ptExpanded");
		var total = $images.length;
		var active = 0;		
 	
 		$images.hide().eq(active).show();
	 	$imgData.text($images.eq(active).attr("alt"));
		
		$nav.hover(
			function(){ stopLoop();	},
			function(){	startLoop(); }
		);
		
		$expand.click(function(e){
			e.preventDefault();
			if( ! $expansion.data("open") ) { open(); }			
			else { close();	}						
		});
		
	 	$prev.click(function(e){
	 		e.preventDefault();
			change(active-1);
	 	});
	 	
	 	$next.click(function(e){
	 		e.preventDefault();
			change(active+1);
	 	});
 		
		function open(){
			$('#offersRotator').cycle('resume');
			$(".openExpanded").fadeOut(200).removeClass("openExpanded");		
			$(".offer").removeClass("open").data("open",false);						
			stopLoop();
			$expansion.data("open", true);
			$expansion.fadeIn(config.speed);
			$expand.addClass("active");
		}
		
		function close(){
			startLoop();		
			$expansion.data("open", false);
			$expansion.fadeOut(config.speed);
			$expand.removeClass("active");			
		}

		function startLoop(){
			$.doTimeout( 'loop', config.frequency, function(){
				change(active+1);
				return true;
			});
		}
		
		function stopLoop(){
			$.doTimeout('loop');
		}

 		function change(rindex){
			if(rindex < 0) { index = (total-1); }			
			else if(rindex >= total){ index = 0; }
			else { index = rindex; }
 			$images.eq(active).fadeOut(config.speed); 			
	 		$imgData.text($images.eq(index).attr("alt"));
 			$images.eq(index).fadeIn(config.speed, function(){	
				active = index;
 			}); 			 			
 		}
		
		startLoop();
		

 		
	};

//

	interface.readMore = function() {
		var text = {
			open : "Read Less",
			closed : "Read More"
		};
		$("a.readMore").click(function(e){
			e.preventDefault();
			var id = $(this).attr("href");
			if( ! $(this).hasClass("open") || $(this).hasClass("closed") ){
				$(id).fadeIn(200);
				$(this).text(text.open).addClass("open").removeClass("closed");
			}
			else {
				$(id).fadeOut(200);
				$(this).text(text.closed).addClass("closed").removeClass("open");
			}
		});
	};


//


};



function gallery(){
		
	var gallery = this;

	// self-executing init
	gallery.init = function(){
		gallery.navigation();
		gallery.controls();
	};
	
//	

	gallery.navigation = function(){

		var config = {
			speed: 100,
			sensitivity: 50		
		};
	
		var $anchors = $("a.pgMN");

		$anchors.each(function(){
			var $anchor = $(this);
			var rel = $anchor.attr("rel");
			var	$container = $(rel);

			$anchor.hover(
				function(){
					$.doTimeout( rel ); // cancel the timeout
					panel.open();
				},			
				function(){
					$.doTimeout( rel, config.sensitivity, function(){
						panel.close();
					});				
				}		
			);	

			$container.hover(			
				function(){
					$.doTimeout( rel ); // cancel the timeout			
				},			
				function(){
					$.doTimeout( rel, config.sensitivity, function(){
						panel.close();
					});			
				}
			);
		
	
			var panel = {
				open : function() {
					$anchor.addClass("active");
					$container.show();
				},			
				close: function() {
					$anchor.removeClass("active");
					$container.hide();
				}		
			};

		
		});
		

		
	};
	
//

	gallery.controls = function(){

		var config = {
			speed : 300,
			frequency: 3000,
			startOn : 0,
			thumbWidth : 130,
			thumbDisplay : 7,
			activeClass : "current",
			activeBorder : "#9E6D3B",
			inactiveBorder : "transparent"			
		};
		
		
		var $images = $("#pgImages img");
		var $imgDesc = $("#pgImgDesc");	
		var $imgTotal = $("#pgTotal");
		var $imgCurrent = $("#pgCurrent");
		var $scroller = $("#pgScroller");
		var $thumbs = $("#pgScroller a");
		
		var $prev = $("#pgPrev");
		var $next = $("#pgNext");
		var $play = $("#pgPlay");
		
		var total = $images.length;
		var active = config.startOn;		
		

		var loop = {
			start : function(){
				$.doTimeout( 'loop', config.frequency, function(){
					change(active+1);
					return true;
				});			
			},
			stop : function(){
				$.doTimeout('loop');			
			}
		};


		var xIndex = {
			clean : function(raw) {
				if(raw < 0) { clean = (total-1); }			
				else if(raw >= total){ clean = 0; }
				else { clean = raw; }				
				return clean;
			}
		};
		

		var images = {
			swap : function(index){
				$images.eq(active).fadeOut(config.speed); 					
	 			$images.eq(index).fadeIn(config.speed); 			 						
			}
		};
 		
 		var data = {
 			update : function(index) {
		 		$imgDesc.text($images.eq(index).attr("alt"));
		 		$imgCurrent.text(index+1);	 		 			
 			}
 		};
 		

 		var thumbs = {
 			activate : function(index){
				$thumbs.removeClass(config.activeClass).css({ "borderColor" : config.inactiveBorder	});
				$thumbs.eq(index).addClass(config.activeClass).animate({ "borderColor" : config.activeBorder });
			}
 		};
 		

 		var scroller = {
 			move : function(index){
				var factor = 0;
				var difference = (index+1) - config.thumbDisplay;
				if (difference >= 0){
				 	factor = difference * config.thumbWidth;
				} 					
				$scroller.animate({left: -factor+"px"}) 			
 			}
 		};
 		
 		
 		function change(rindex){
			var index = xIndex.clean(rindex);
			images.swap(index);
			data.update(index);
			scroller.move(index);
			thumbs.activate(index);
			active = index;
 		}
 		
 		
	 	$prev.click(function(e){
	 		e.preventDefault();
	 		loop.stop();
			change(active-1);
			loop.start();
	 	});
	 	
	 	$next.click(function(e){
	 		e.preventDefault();
	 		loop.stop();
			change(active+1);
			loop.start();
	 	});
	 	
	 	$play.click(function(e){
	 		e.preventDefault();
	 		if( $(this).data("playing") ){
	 			loop.stop();			
	 			$(this).removeClass("pause").data("playing",false);	 			
	 		}
	 		else {
	 			loop.start();
	 			$(this).addClass("pause").data("playing",true);	 		
	 		}	 		
	 	}); 		
	 	

 		$thumbs.click(function(e){
 			e.preventDefault();
			var xind = $(this).index();
			loop.stop();
			change(xind);	
			loop.start();
 		});

	 	
 		$play.data("playing",true).addClass("pause");
 		
 		$images.hide().eq(active).show();
	 	$imgDesc.text($images.eq(active).attr("alt"));
	 	$imgCurrent.text(active+1);
	 	$imgTotal.text($images.length);
		$thumbs.eq(active).addClass(config.activeClass).animate({ "borderColor" : config.activeBorder });	 	
		loop.start();			 	

 		

	};
	

//



};




$(document).ready( function(){
	var i = new interface();
		i.init();
});	
