var pins = {};
var site = (function () {
	'use strict';
	var obj, downstream = function () {
		var ignore = ['google', 'yahoo', 'tigglobal'];
		ignore.push(location.host);
		$$('a').invoke('observe', 'click', function (evt) {
			var j = 0, dest, log = true, obj = Event.element(evt);
			if (obj.tagName.toLowerCase() !== 'a') {
				while (obj.tagName.toLowerCase() !== 'a' && j < 20) {
					obj = obj.up();
					j++;
				}
			}
			if (obj.href && obj.href.indexOf('://') !== -1) {
				ignore.each(function (item) {
					if (obj.href.indexOf(item) !== -1) {
						log = false;
					}
				});
				if (log) {
					evt.stop();
					obj.stopObserving();
					window.open(
						"/site_interactions/track/?&a=1&d=" + escape(obj.href) + '&o=' + escape(location.href) + '&t=' + escape($$('title')[0].innerHTML) + '&u=' + escape(navigator.userAgent),
						obj.target
					);
					return false;
				}
			}
			return true;
		});
	};
	obj = {
		events: {
			"more": function (id) {
				$(id).select("li").each(function (item) {
					if (item.hasClassName('hidden')) {
						item.toggle();
					}
				});
			}
		},
		nav: {
			update: function () {
				var width, height, w, iw = 0;
				width = document.viewport.getWidth();
				height = document.viewport.getHeight();
				$$('div.menu ul.level-1', 'div.menu ul.level-2', 'div.menu ul.level-3').invoke('setStyle', {
					'width': width + 'px',
					'paddingLeft': 0,
					'paddingRight': 0,
					'marginLeft': 0,
					'marginRight': 0
				});
				$$('div.menu ul.level-1 > li').map(function (item) {
					iw = iw + item.getWidth();
				});
				w = (width - iw) / 2;
				$$('div.menu ul.level-1 > li:first-child').map(function (item) {
					$(item).setStyle({'marginLeft': w + 'px'});
				});
				w = (width - 960) / 2;
				$$('div.menu ul.level-2 > li:first-child').map(function (item) {
					$(item).setStyle({'marginLeft': (w - 15) + 'px'});
				});
				$$('div.menu ul.level-3 > li:first-child').map(function (item) {
					$(item).setStyle({'marginLeft': (w - 15) + 'px'});
				});
				$$('div.menu')[0].setOpacity(1.0);
				if ($$('div.menu ul.level-1 > li.active > ul', 'div.menu ul.level-1 > li.selected > ul').length === 0) {
					$$('div.menu div:not(.edge-s)').map(function (item) {
						$(item).addClassName('mask');
					});
					if ($$('div.menu ul.level-1 > li > ul').length > 0) {
						$$('div.menu ul.level-1 > li').map(function (item) {
							$(item).observe('mouseenter', function () {
								if ($(this).select(' > ul').length > 0) {
									$$('div.menu div:not(.edge-s)').invoke('hide');
								}
							});
							$(item).observe('mouseleave', function () {
								$$('div.menu div:not(.edge-s)').invoke('show');
							});
						});
					}
				}
			}
		},
		home: {
			noop: null,
			noopScale: null,
			gallery: function () {
				if (!$('home-gallery-box')) { return; }
				this.noopScale = new NooptyScaler({
					'containerId': 'home-gallery-box',
					'image': 'img',
					'rightclick': false
				});
				this.noopScale.update();
				Event.observe(window, 'resize', function () {
					if ($('home-gallery').visible()) {
						obj.home.noopScale.update();
					}
				});
				this.noop = new Noopty({
					"containerId": "home-gallery-box",
					"slide": "div",
					"delay": 8.0,
					"duration": 0.5,
					"hover": true,
					"shuffle": true,
					"next": "a.gallery-back",
					"back": "a.gallery-next",
					"mouseenter": function (evt) {
						return;
					},
					"mouseleave": function (evt) {
						return;
					}
				});
				this.noop.start();
			},
			map: function () {
				if (!$('home-map-box')) { return; }
				if (googleMap.map === null) {
					$('home-map-box').setStyle({"position": "absolute", "width": "100%", "height": "100%"});
					googleMap.zoom = 11;
					googleMap.canvas = 'home-map-box';
					googleMap.initialize(30.3284, -86.1669);
					if (pins.beaches) {
						googleMap.clearMarkers();
						googleMap.setMarkers(pins.beaches);
					}
				}
			},
			tabs: function () {
				if (!$('home-gallery-box') || !$('home-map-box')) { return; }
				$$("div.toggle-tabs a").invoke('observe', 'click', function (evt) {
					evt.stop();
					$$("div.toggle-tabs a").invoke('removeClassName', 'selected');
					this.addClassName('selected');
					if (this.innerHTML === 'Gallery') {
						$('home-map').hide();
						$('home-gallery').show();
						obj.home.noopScale.update();
					} else {
						$('home-gallery').hide();
						$('home-map').show();
						obj.home.map();
					}
				});
				obj.home.gallery();
			}
		},
		conditions: {
			init: function () {
				this.beach();
				this.weather();
			},
			beach: function () {
				var flags, hazard, datetime;
				flags = $$('.flag');
				hazard =  $$('.hazard');
				datetime = $$('.datetime');
				if (flags.length > 0 || hazard.length > 0) {
					new Ajax.Request('/module_beaches/conditions', {
						onComplete: function (transport) {
							var className, d = transport.headerJSON;
							switch (d.flagcolor) {
								case 'green':
									className = 'con-low';
									break;
								case 'yellow':
									className = 'con-medium';
									break;
								case 'red':
									className = 'con-high';
									break;
								case 'double':
									className = 'con-closed';
									break;
								case 'purple':
									className = 'con-dangerous';
									break;
								default:
									className = null;
							}
							flags.each(function (item) {
								$(item).addClassName(className);
								$(item).writeAttribute({"title": "Current Conditions: " + d.condition + ', ' + d.date});
							});
							hazard.each(function (item) {
								$(item).update(d.condition);
							});
							datetime.each(function (item) {
								$(item).update(d.date);
							});
						}
					});
				}
			},
			weather: function () {
				var temp = $$('span.temp', ".temp-now"); //,
				if (temp.length > 0) {
					new Ajax.Request('/module_beaches/weather', {
						onComplete: function (transport) {
							var trans, d = {};
							if (transport.responseJSON) {
								trans = transport.responseJSON;
							} else {
								trans = transport.responseText.evalJSON(true);
							}
							temp.each(function (item) {
								var str = (trans.now) ? ('<span title="">' + trans.now + '°</span> f') : null;
								$(item).update(str);
							});
							$$('.temp-high').each(function (item) {
								var str = (trans.max) ? ('H <span title="">' + trans.max + '°</span>') : null;
								item.update(str);
							});
							$$('.temp-low').each(function (item) {
								var str = (trans.min) ? ('L <span title="">' + trans.min + '°</span>') : null;
								item.update(str);
							});
						}
					});
				}
			}
		},
		gallery: {
			gals: [],
			init: function () {
				var that = this;
				$$("div.mini-gallery", "div.med-gallery").map(function (item, i) {
					item.id = "galleryContainer" + i;
					$$("#" + item.id + " > a").invoke('hide');
					if ($$("#" + item.id + " > img").length > 1) {
						that.gals[i] = new Noopty({
							"containerId": item.id,
							"slide": "img",
							"delay": 2.0,
							"duration": 0.25,
							"hover": false,
							"shuffle": false,
							"next": "#" + item.id + " a.next",
							"back": "#" + item.id + " a.back"
						});
						item.observe('mouseenter', function () {
							that.gals[i].start();
							$$("#" + this.id + " > a").invoke('appear', {duration: 0.5});
						});
						item.observe('mouseleave', function () {
							that.gals[i].stop();
							$$("#" + this.id + " > a").invoke('hide');
						});
					} else {
						$$("#" + item.id + " > a").invoke('remove');
					}
				});
			}
		},
		tabs: {
			init: function () {
				$$("div.tab-container").map(function (item) {
					var tabs, tabbed;
					tabs = item.select(".tab-box a");
					tabbed = item.select(".tab-content");
					tabs.each(function (ele, i) {
						if (i === 0) {
							ele.addClassName('selected');
							tabbed[i].show();
						} else {
							ele.removeClassName('selected');
							tabbed[i].hide();
						}
						ele.observe('click', function (evt) {
							evt.stop();
							tabs.each(function (ele, i) { ele.removeClassName('selected'); });
							this.addClassName('selected');
							tabbed.each(function (ele, i) { ele.hide(); });
							tabbed[i].show();
						});
					});
				});
			}
		},
		newsletter: {
			init: function () {
				if ($('newsletter_f_submit') === null) {
					return;
				}
				var data_default = {
					'email': $F('newsletter_f_email'),
					'zip': $F('newsletter_f_zip')
				};
				$('newsletter_f_email').observe('focus', function (evt) {
					this.addClassName('on');
					if (this.getValue() === data_default.email) {
						this.setValue('');
					}
				});
				$('newsletter_f_email').observe('blur', function (evt) {
					this.removeClassName('on');
					if (this.getValue() == '') {
						this.setValue(data_default.email);
					}
				});
				$('newsletter_f_zip').observe('focus', function (evt) {
					this.addClassName('on');
					if (this.getValue() === data_default.zip) {
						this.setValue('');
					}
				});
				$('newsletter_f_zip').observe('blur', function (evt) {
					this.removeClassName('on');
					if (this.getValue() == '') {
						this.setValue(data_default.zip);
					}
				});
				$('newsletter_f_submit').observe('click', function (evt) {
					evt.stop();
					var data = {
						'email': $F('newsletter_f_email'),
						'zip': $F('newsletter_f_zip')
					};
					if (data.email === data_default.email) {
						data.email = null;
					}
					if (data.zip === data_default.zip) {
						data.zip = null;
					}
					if (data.email === null) {
						alert("Please enter an email address");
						return;
					}
					new Ajax.Request('/module_beaches/subscriptions', {
						parameters: data,
						onSuccess: function (transport) {
							if (transport.responseJSON === null) {
								alert('Sorry an error occurred. Please try again later.');
								return;
							}
							var json = transport.responseJSON;
							if (json.result === 1) {
								$('newsletter_f_email').setValue(data_default.email);
								$('newsletter_f_zip').setValue(data_default.zip);
								alert('Thank You!');
							} else if (json.result === 0) {
								alert(json.response);
							} else {
								alert('Sorry an error occurred. Please try again later.');
							}
						},
						onFailure: function (transport) {
							$('newsletter_f_email').setValue(data_default.email);
							$('newsletter_f_zip').setValue(data_default.zip);
							alert('Sorry an error occurred. Please try again later.');
						}
					});
				});
			}
		},
		subscribe_widget: function () {
			var toggle, centerWidget, wdg = $('subscribe_widget');
			toggle = function () {
				var xpos = (document.viewport.getWidth() / 2);
				if (parseInt(wdg.getStyle('top')) === -300 ) {
					new Effect.Move(wdg, {x: xpos, y: 0, mode: 'absolute', duration: 0.5});
				} else if (parseInt(wdg.getStyle('top')) === 0 ) {
					new Effect.Move(wdg, {x: xpos, y: -300, mode: 'absolute', duration: 0.5});
				}
			};
			centerWidget = function () {
				var xpos = (document.viewport.getWidth() / 2);
				$('subscribe_widget').setStyle({'left': xpos + 'px'});
			};
			centerWidget();
			wdg.observe('mouseleave', function () {
				toggle();
			});
			if ($$('a.promo-button.subscribe').length > 0) {
				$$('a.promo-button.subscribe').invoke('observe', 'click', function (evt) {
					evt.stop();
					toggle();
				});
			}
			Event.observe(window, 'resize', function () {
				centerWidget();
			});
		},
		init: function () {
			obj.nav.update();
			obj.home.tabs();
			obj.tabs.init();
			obj.subscribe_widget();
			obj.conditions.init();
			obj.newsletter.init();
			downstream();
			Event.observe(window, 'resize', site.nav.update);
			Event.observe(window, 'load', function () {
				obj.gallery.init();
				$$('.sv_api_reqhint').map(function (item) {
					$(item).update(' Required Fields.');
				});
			});
		}
	};
	return obj;
})();
document.observe("dom:loaded", function () {
	'use strict';
	$$('div.menu')[0].setOpacity(0.0);
	site.init();
});
