/**
 * dependcies:
 * mootools v1.2 (http://www.mootools.net)
 * Author: Mark Hudson, mark@ritetek.com
 */
 

// set Ritetek Namespace if not already defined
if (typeof EE == "undefined") {
	var EE = {};
}

EE.winLoaded = false;
EE.domReady = false;
EE.section = null;
 
 /* ------------------------------------------------------------------------------------------------
 * Page initialization
 * ------------------------------------------------------------------------------------------------
 */


window.addEvent('domready',function() {
	EE.domReady = true;
	EE.section = document.body.id;
	EE.pageName = getPageName();
	
	EE.mainNav.init('mainNav');
	
	var tabContent = document.getElements('.tabContent');
	if($chk(tabContent)) {
		tabContent.each(function(tabbedContent) {
			new Tabs(tabbedContent);
		});
	}
	
	if($chk($('mainBanner'))) {
		EE.bannerFader.init('mainBanner');
	}
	
	if(EE.section == 'destinationsLanding') {
		EE.destinationsLanding.init('destinationsMap');
	}
	
	if(EE.section == 'reservations') {
		var args = getArguments();
		if($chk(args['view']) && args['view'] == 'year') {
			EE.reservations.calendarSlider.init('calendarSlider-content', 'fourMonthContent', 1);
		}
		
		var date_inputs = document.getElements('input.date');
    if($chk(date_inputs)) {
    	date_inputs.each(function(el, i){
				new DatePicker(el);
			});
    }
	}
});

function getArguments() {
	if(window.location.search.split('?').length < 2) return false;
	
	var args = window.location.search.split('?')[1].split('&');
	var response = Array();
	
	for (var i = 0; i < args.length; i++) {
		var pair = args[i].split('=');
		response[pair[0]] = pair[1];
	}
	
	return response;
}

function getPageName() {
	var path = window.location.pathname;
	var page = path.substring(path.lastIndexOf('/') + 1);
	if(page == '') page = 'index.html';
	
	return page;
}

function ieNavFix(navContainer) {
	if(navigator.appName == "Microsoft Internet Explorer") {
		$$('#' + navContainer + ' li').each(function(elAye) {
			var children = elAye.getChildren();
			if(children.length > 1) {
				elAye.addEvents({
					'mouseover': function() {
						children[1].setStyle('display', 'block');
					},
					'mouseout': function() {
						children[1].setStyle('display', 'none');
					}
				});
				children[1].setStyle('display', 'none');
			}
		});
	}
}

function popUp(URL) {
	day = new Date();
	id = day.getTime();
	eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=0,width=500,height=500,left = 590,top = 275');");
}

EE.mainNav = {
	init: function(navContainer) {
		$$('#' + navContainer + ' li').each(function(elAye) {
			var children = elAye.getChildren();
			if(children.length > 1) {
				elAye.set('tween', {duration: 200});
				elAye.addEvents({
					'mouseenter': function(e) {
						var action = 'in';
						if(navigator.appName == "Microsoft Internet Explorer" && typeof document.body.style.maxHeight == "undefined") {
							action = 'show';
						}
						children[1].fade(action);
					},
					'mouseleave': function(e) {
						var action = 'out';
						if(navigator.appName == "Microsoft Internet Explorer" && typeof document.body.style.maxHeight == "undefined") {
							action = 'hide';
						}
						children[1].fade(action);
					}
				});
				children[1].setStyle('display', 'block');
				children[1].fade('hide');
			}
		});
	}
}

EE.bannerFader = {
	init: function(container) {
		container = $(container);
		this.banners = container.getElements('li');
		this.active = 0;
		
		this.banners.each(function(banner, i) {
			if(i == 0) {
				banner.setStyle('z-index', 51);
				banner.fade('show');
			}
			else {
				banner.setStyle('z-index', 50);
				banner.fade('hide');
			}
			banner.set('tween', {duration: 2000});
		});
		
		this.swap.periodical(7000, this);
	},
	swap: function() {
		var next = this.active == this.banners.length - 1 ? 0 : this.active + 1;
		
		this.banners.each(function(banner, i) {
			banner.setStyle('z-index', i == next ? 51 : 50);
		});
		
		this.banners[this.active].fade('out');
		this.banners[next].fade('in');
		
		this.active = next;
	}
}

EE.destinationsLanding = {
	init: function(map) {
		map = $(map);
		
		if (GBrowserIsCompatible()) {
			this.map = new GMap2(map);
			this.map.addControl(new GMapTypeControl());
			this.map.setCenter(new GLatLng(40, -90), 3);
			
			for(var i = 0; i < this.destinations.length; i++) {
				var dest = this.destinations[i];
				var point = new GLatLng(dest.lat, dest.lng);
				var marker = this.createMarker(point, dest.name, dest.link, dest.color);
				this.map.addOverlay(marker);
			}
		}
		else {
			alert("Sorry, the Google Maps API is not compatible with this browser");
		}
	},
	
	createMarker: function(point, name, link, color) {
		var newIcon = IconFactory.createMarkerIcon({width: 23, height: 23, primaryColor: color});
		var marker = new GMarker(point, {icon: newIcon});
		
		GEvent.addListener(marker, "click", function() {
			document.location.href = link;
		});
		GEvent.addListener(marker, "mouseover", function() {
			marker.openInfoWindowHtml(name);
		});
		GEvent.addListener(marker, "mouseout", function() {
			this.map.closeInfoWindow();
		}.bind(this));
		
		return marker;
	}
}

EE.reservations = {
	calendarSlider: {
		init: function(container, boxClass, start) {
			this.container = $(container);
			
			this.boxes = this.container.getElements('.' + boxClass);
			this.increment = this.boxes[0].getCoordinates()['width'].toInt() + this.boxes[0].getStyle('marginLeft').toInt() + this.boxes[0].getStyle('marginRight').toInt();
			
			this.current = $chk(start) ? start : 1;
			this.set(this.current);
			
			document.getElement('#calendarSlider-nav .navButton.next a').addEvent('click', function() {
				this.scroll(this.getNext());
			}.bind(this));
			document.getElement('#calendarSlider-nav .navButton.previous a').addEvent('click', function() {
				this.scroll(this.getPrev());
			}.bind(this));
		},
		
		scroll: function(pos) {
			pos = $chk(pos) ? pos : this.getNext();
			this.container.tween('marginLeft', this.increment * (pos - 1) * -1);
			this.current = pos;
		},
		
		set: function(pos) {
			pos = $chk(pos) ? pos : this.getNext();
			this.container.setStyle('marginLeft', this.increment * (pos - 1) * -1);
			this.current = pos;
		},
		
		getNext: function(pos) {
			pos = $chk(pos) ? pos : this.current;
			return pos == this.boxes.length ? 1 : pos + 1;
		},
		
		getPrev: function(pos) {
			pos = $chk(pos) ? pos : this.current;
			return pos == 1 ? this.boxes.length : pos - 1;
		}
	}
}