/* ----------------------
Mirvac Hotels Events
General interface functions
-------------------------
Written by Eiran Cooper 
for Square Circle Triangle
www.sct.com.au
---------------------- */

var framework = {
	initNav : null,
	setActiveClass : function(){
		$navItems = $("#nav_items");
		isNavCurrent = $('#nav_items > li').hasClass('current');
		isNavActive = $navItems.hasClass('active');

		if(isNavActive && !isNavCurrent){
			$navItems.removeClass("active");
		} else {
			$navItems.addClass("active");
		}
			
	},
	setCurrentClass : function(_this){
		var isThisCurrent = $(_this).hasClass('current');
		if(!isThisCurrent && isNavActive){
			$('#nav_items > li').removeClass("current"); 
			$(_this).addClass("current");
		} else {
			$(_this).addClass("current");
		}
	},
	toggleSubnav : function(_this, toggle){
		switch(toggle){
			case "open": 
				$('.subnav', _this).fadeIn('fast');
				this.setActiveClass();
				this.setCurrentClass(_this);
				break;
				
			case "close":
				$('.subnav', _this).fadeOut('fast');
				$(_this).removeClass("current");
				this.setActiveClass();
				//this.initTimeout("framework.restoreActiveNav()", "2000");
				break;
			
			case "onload":
				
				break;
		}
	},
	findActiveNav : function(){
		$initNav = $('#nav_items').find('li.current');
	},
	restoreActiveNav : function(){
		if($initNav !== "" && !isNavCurrent){
			//framework.toggleSubnav($initNav, 'open');
			$('.subnav', $initNav).show();
			$($initNav).addClass("current");
			$navItems.addClass("active");
		}
	},
	toggleSearch : function(){
		if(!searchOpen && $('#search:animated').length == 0){
			$('#search').animate({ "top" : "35px", "opacity" : "show" },{ queue:false, easing: "easeOutQuint", duration:1200 });
			$('li.search a').addClass('active');
			searchOpen = true;
			
			if(elementsHidden && enquiryOpen){ framework.toggleEnquiry(); } else if(!enquiryOpen && !elementsHidden){ activeElements.hide(); elementsHidden = true; }
			if(featuresActive){ featureSet.toggleFeatures('close'); }

		} else {
			$('#search').animate({ "top" : "-200px", "opacity" : "hide" },{ queue:false, easing: "easeInOutQuint", duration:500 });
			$('li.search a').removeClass('active');
			$('#results_wrap, #bgwrap .overlay').hide();
			searchOpen = false;
			
			if(!enquiryOpen && elementsHidden){ activeElements.show(); elementsHidden = false; }
		}
	},
	toggleEnquiry : function(){
		if(!enquiryOpen && $('#enquiry:animated').length == 0 ){
			$('#enquiry').animate({ "top" : "35px", "opacity" : "show" },{ queue:false, easing: "easeOutQuint", duration:1200 });
			$('li.enquiry a').addClass('active');
			enquiryOpen = true;
			
			if(elementsHidden && searchOpen){ framework.toggleSearch(); } else if(!searchOpen && !elementsHidden){ activeElements.hide(); elementsHidden = true; }
			if(featuresActive){ featureSet.toggleFeatures('close'); }

			var hotelname = $('#enquiry input#sitename_clean').val();
			pageTracker._trackPageview("/events/"+hotelname+"/enquiry-form");

		} else {
			
			$('#enquiry').animate({ "top" : "-200px", "opacity" : "hide" },{ queue:false, easing: "easeInOutQuint", duration:500 });
			$('li.enquiry a').removeClass('active');
			$('#bgwrap .overlay').hide();
			enquiryOpen = false;
			
			if(!searchOpen && elementsHidden){ activeElements.show(); elementsHidden = false; }
		}
	},
	initTimeout : function(hollerback, timing){
		genTimer = setTimeout( hollerback, timing);	
	},
	init : function(){
		searchOpen = false;
		enquiryOpen = false;
		elementsHidden = false;
		activeElements = $('#inner_content, #mainnav_wrap, .keyline');
		//this.findActiveNav();
		//this.initTimeout("", "3000");
	}
	
};

// Featured specials
var featureSet = {
	toggleFeatures : function(toggle){
		var toggle, status;
		var $featNavItem = $('#nav_items li.features');
		
		switch(toggle){
			case "open":
				var expandTo = "215px", easeMethod = "easeInSine"; 
				$("#features").stop().animate({ height: expandTo },{ queue:false, easing: easeMethod, duration:700 }, this.toggleContent(toggle));
				$featNavItem.addClass('active');
				framework.setActiveClass();
				framework.setCurrentClass($featNavItem);
				if(enquiryOpen){ framework.toggleEnquiry(); }
				break;
				
			case "close":
				var expandTo = "0px", easeMethod = "easeOutSine"; 
				$("#features").stop().animate({ height: expandTo },{ queue:false, easing: easeMethod, duration:700 }, this.toggleContent(toggle));
				$featNavItem.removeClass('active');
				$featNavItem.removeClass('current');
				if( !$featNavItem.hasClass('current, active') && !$('#nav_items > li').hasClass('current') ){
					$('#nav_items').removeClass('active');
				}
				
				break;
				
			case "hide":
				var expandTo = "0px", easeMethod = "easeOutSine"; 
				$("#features").stop().animate({ height: expandTo },{ queue:false, easing: easeMethod, duration:700 }, this.toggleContent(toggle));
				$featNavItem.removeClass('active');
				$featNavItem.removeClass('current');
				if( !$featNavItem.hasClass('current, active') && !$('#nav_items > li').hasClass('current') ){
					$('#nav_items').removeClass('active');
				}

				break;
				
			case "active":
				// Do nothing
				break;	
		}

	},
	toggleContent : function(status){
		switch(status){
			case "open":
				featuresActive = true;
				$('#inner_content').fadeOut();
				$('.keyline').fadeOut();
				$('#nav_items li, #topnav li').not( $('#nav_items li.features') ).bind("mouseenter",
					function(){ featureSet.initTimeout("featureSet.toggleFeatures('close')", "500");
					});
				
				break;
				
			case "close":
				featuresActive = false;
				$('#inner_content').fadeIn();
				$('#nav_items li, #topnav li').not( $('#nav_items li.features') ).unbind("mouseenter");
				break;
				
			case "active":
				// Do nothing
				break;	
		}
	},
	featureSlider : function(){
		if(currentFeature < featuresLength){
			currentFeature++;
			$('#feature_wrap').animate({ "left" : "-=635px" }, { queue:false, easing: "easeOutQuint", duration:1200 });
		} else {
			currentFeature = "1";
			$('#feature_wrap').animate({ "left" : "0px" }, { queue:false, easing: "easeOutQuint", duration:2500 });
		}
	},
	loadFeatures : function(){
		// Global region ajax loader
		if( $('div#pagewrap').hasClass('home') == false ){
			$('.loader_box').fadeIn( function(){
				$("#feature_items").load("index.html #feature_wrap", function(){
					$('.loader_box').fadeOut();
					Cufon.replace('#features h2');
					featureSet.init();
				});
			});
		}
	},
	initTimeout : function(hollerback, timing){
		hoverTimer = setTimeout( hollerback, timing);	
	},
	init : function(){
		
		hoverTimer = null;
		featuresActive = false;
		currentFeature = "1";
		featuresLength = $('#feature_wrap .feature_item').length;
		
		if(featuresLength == 1){
			$('#features a.featnav_next').hide();
		};
	}
};

// Background resizer
var bgHandler = {
	
	resetSizes : function(){
		winWidth = $(window).width();
		winHeight = $(window).height();
	},

	bgImgRatio : function(){
		var $background = $('#bgwrap img');

		var bgWidth = $background.width();
		var bgHeight = $background.height();
		rtOver = bgWidth / bgHeight;
		rtUnder = bgHeight / bgWidth;

		if((winWidth / winHeight) >= rtOver) {
			return 'vertical';
		} else {
			return 'horizontal';
		}
	},

	scalebgImage : function(){
		var $background = $('#bgwrap img');
		if(bgHandler.bgImgRatio() == 'vertical'){
			$background.css('width',winWidth);
			$background.css('height',Math.floor(rtUnder*winWidth));
		} else {
			$background.css('width',Math.floor(rtOver*winHeight));
			$background.css('height',winHeight);
		}
	},
	
	reposition : function(cmd){
		this.resizeElements(cmd);
		if($.browser.mozilla){
			setTimeout(function() {
				bgHandler.resizeElements(cmd);
			}, 100);
		}
	},
	
	resizeElements : function(cmd){
		this.resetSizes();
		this.scalebgImage();
		//this.positionContent();
	},
	
	bgLoaded : function(domObject){
		$('div#pageloader .loader_box').hide();
		$('div#pageloader').fadeOut();
		bgHandler.reposition('resize');
		//$('#bgwrap img').animate({'opacity':'show'},{duration: 500});
		//$('div#pageloader').hide();
	},
	
	init : function(){
		var winWidth, winHeight, rtOver, rtUnder, bgWidth, bgHeight;
		
		winWidth = $(window).width();
		winHeight = $(window).height();
		
		$('#bgwrap img').onImagesLoad({ 
			itemCallback: bgHandler.bgLoaded,
			callbackIfNoImagesExist: bgHandler.bgLoaded
		});
		
		$('div#pageloader').click(function(){
			bgHandler.bgLoaded();
		});
		
		$(window).resize(function(){
			bgHandler.reposition('resize');
		});
		
		$('#bgwrap img').removeAttr('alt');
	}

};

// DOM Ready
$(function(){
	framework.init();
	featureSet.init();
	featureSet.loadFeatures();

	
	Cufon.replace('#search h1, #search p.instructions, #enquiry h1');
	Cufon.replace('#inner_content h1, #inner_content h2, li.section_header');
	
	// Subnav toggle
	$('#nav_items > li').hoverIntent(
		function(){
			if($(this).children(".subnav").length > 0)
				framework.toggleSubnav(this, 'open');
		},
		function(){
			if($(this).children(".subnav").length > 0)
			framework.toggleSubnav(this, 'close');
		}	
	);

	// Search toggle & test submit
	$('li.search a, #search a.close').click(function(){
		//if(!$('#search:animated') && !$('#enquiry:animated'))
		framework.toggleSearch();
			
		return false;
	});
	
	$('li.enquiry a, #enquiry a.close').click(function(){
		//if(!$('#search:animated') && !$('#enquiry:animated'))
		framework.toggleEnquiry();
		//featureSet.toggleFeatures('close');
		return false;
	});
	
	$('#enquiry input.hidden').change(function() {
		$('#enquiry input#file_path').val($(this).val());
	});
	
	// Enquiry form validation
	var hideErrorMsg = function(){
		hideTimer = setTimeout("$('form#enquiry_form label.error').fadeOut()", 800);
	};

	$('form#enquiry_form').submit(function(){
		
		$("form#enquiry_form").validate({
			rules: {
				first_name: "required",
				primary_email: {
					required: true,
					email: true
				}
			},
			messages: {
				first_name: "Please specify your name",
				last_name: "Please specify your name",
				primary_email: {
					required: "Please enter your email",
					email: "Please enter a valid email"
				}
			},
			highlight: function(element, errorClass) {
				$(element).addClass('error');
				hideErrorMsg();
			},
			submitHandler: function(form) {
				$('form#enquiry_form').hide();
				$('#enquiry #thankyou').show();
				
				var hotelname = $('#enquiry input#sitename_clean').val();
				pageTracker._trackPageview("/events/"+hotelname+"/enquiry-submit");
				
		    	f = $('form#enquiry_form')[0];
		  		f.source.value = source;
				f.medium.value = medium;
				
				form.submit();
			}
		});
		
		return false;
	});
	
	$('form#enquiry_form button').click(function(){
		$('form#enquiry_form').submit();
	});
	
	if( $('#sidenav').children('#sidenav_items').length > 0 ){
		$('#nav_items li.current .subnav').hide();
	};
	
	// Feature DOM ready functions
	Cufon.replace('.keyline h1, #features h2');
	
	$('#nav_items li.features, #topnav li.offers').click( function(){
		if(!featuresActive)
			featureSet.toggleFeatures('open');
		else
			featureSet.toggleFeatures('close');
	});

	$('#features').mouseenter(function(){
		featureSet.toggleFeatures('active');
		clearTimeout(hoverTimer);
	});

	$('#features').mouseleave(function(){
		featureSet.initTimeout("featureSet.toggleFeatures('close')", "1200");
	});

	$('a.featnav_next').click(function(){
		if( $('#feature_wrap:animated').length < 1 ){ featureSet.featureSlider(); }
		return false;
	});
	
	$('.buttons a').each(function(){
		if($(this).attr('href') == "" || $(this).attr('href') == "#" ){
			$(this).remove();
		}
	});
	
	// Disable caching for IE
	try {
	 document.execCommand('BackgroundImageCache', false, true);
	} catch(e) {}
	
	bgHandler.init();
});
