/* -----------------------------------------------------------
Copyright: ©22008 Terra Firma Design & Consulting. All Rights Reserved.
Author: Brian Getting
Company: Terra Firma Design & Consulting
URL: http://www.terra-firma-design.com
----------------------------------------------------------- */

var errorColor = "#fffbfb";
var errorBorder = "#c00";
var regExpEmail = /\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/;
var regExpPhone = /^\D?(\d{3})\D?\D?(\d{3})\D?(\d{4})$/;
var defaultTextAreaHeight = 218;
var expandedTextAreaHeight = 500;
var textAreaThreshold = 400;

/* -------------------------------------------------------- */

Global = {
  adjustTextarea: function(e) {
  	textArea = $(Event.element(e));
  	if (textArea.value.length > textAreaThreshold) {
  		textArea.morph('height:'+expandedTextAreaHeight+'px;', {duration:0.2});
  	} else {
  		textArea.morph('height:'+defaultTextAreaHeight+'px;', {duration:0.2});
  	}
  },
  
  clearFlash: function() {
    $('flash_notice').fade({duration:0.5, delay:5});
    $('flash_notice').blindUp({duration:0.5, delay:5});
  },
  
  setup: function() {
    Global.externalLinks();
    if ($('flash_notice')) Global.clearFlash();
    if ($('catering_message')) Catering.setup();
    if ($('contact_message')) Contact.setup();
		if ($('post_content')) Post.setup();
  },
  
  externalLinks: function() {
    external_links = $$('a[rel=external]');
    external_links.each(function(l) {
      l.writeAttribute('target', '_blank');
    })
  }
}

Catering = {
	validate: function() {
		var name = $('catering_name');
    var email = $('catering_email');
    var phone = $('catering_phone');
    var date = $('catering_event_date');
    var guests = $('catering_attendance');
    var message = $('catering_message');
    var cateringSubmit = $('catering_submit');
    var loadIcon = $('catering_loader');
    var contactPrivacy = $('catering_privacy');
    var errors = "";
    if (name.value == "") {
		  name.addClassName('fieldError');
			errors += "* Please enter your name.\n";
		}
    if ((email.value == "") || !regExpEmail.test(email.value)) {
		  email.addClassName('fieldError');
			errors += "* Please enter your email address.\n";
		}
		if ((phone.value == "") || !regExpPhone.test(phone.value)) {
		  phone.addClassName('fieldError');
			errors += "* Please enter a valid phone number.\n";
		}
		if (date.value == "") {
		  date.addClassName('fieldError');
			errors += "* Please tell us when you event will occur.\n";
		}
		if (guests.options[guests.selectedIndex].value == "") {
      guests.addClassName('fieldError');
      errors += "* Please tell us how many guests you expect.\n";
    }
		if (message.value == "") {
		  message.addClassName('fieldError');
			errors += "* Please enter a brief message.\n";
		}
		if (errors == "") {
		  cateringSubmit.disabled = true;
		  cateringSubmit.value = "Sending..."
		  contactPrivacy.hide();
		  loadIcon.show();
		  return true
		} else {
		  alert(errors);
		  return false;
		}
	},
	
	setup: function() {
		message_field = $('catering_message');
    message_field.setStyle({height: defaultTextAreaHeight +"px"});
    message_field.observe('keyup', Global.adjustTextarea.bind(catering_message));
		// set up the calendar
    Calendar.setup({dateField:'catering_event_date'});
	}
}

Contact = {
  validate: function() {
    var name = $('contact_name');
    var email = $('contact_email');
    var message = $('contact_message');
    var contactSubmit = $('contact_submit');
    var loadIcon = $('contact_loader');
    var contactPrivacy = $('contact_privacy');
    var errors = "";
    if (name.value == "") {
		  name.addClassName('fieldError');
			errors += "* Please enter your name.\n";
		}
    if ((email.value == "") || !regExpEmail.test(email.value)) {
		  email.addClassName('fieldError');
			errors += "* Please enter your email address.\n";
		}
		if (message.value == "") {
		  message.addClassName('fieldError');
			errors += "* Please enter a brief message.\n";
		}
		if (errors == "") {
		  contactSubmit.disabled = true;
		  contactSubmit.value = "Sending..."
		  contactPrivacy.hide();
		  loadIcon.show();
		  return true
		} else {
		  alert(errors);
		  return false;
		}
  },
  
  setup: function() {
    message_field = $('contact_message');
    message_field.setStyle({height: defaultTextAreaHeight +"px"});
    message_field.observe('keyup', Global.adjustTextarea.bind(contact_message));
  }
}

Login = {
  validate: function() {
    var username = $('user_session_login');
    var password = $('user_session_password');
    var loginSubmit = $('login_submit');
    var loadIcon = $('loadicon');
    var errors = "";
    if (username.value == "") {
	    username.addClassName('fieldError');
			errors += "* Please enter a username.\n";
		} else if (username.value.length < 3 || username.value.length > 40) {
		  username.addClassName('fieldError');
			errors += "* Username must be between 3 and 40 characters.\n";
		}
		if (password.value == "") {
		  password.addClassName('fieldError');
			errors += "* Please enter a password.\n";
		}
		if (errors == "") {
		  loginSubmit.disabled = true;
		  loadIcon.show();
		  return true
		} else {
		  alert(errors);
		  return false;
		}
  },
  
  forgot: function() {
    var email = $('email');
    var loadIcon = $('loadicon');
    var loginSubmit = $('forgot_submit');
    var errors = "";
    if ((email.value == "") || !regExpEmail.test(email.value)) {
		  email.addClassName('fieldError');
			errors += "* Please enter your email address.\n";
		}
		if (errors == "") {
		  loginSubmit.disabled = true;
		  loadIcon.show();
		  return true
		} else {
		  alert(errors);
		  return false;
		}
  },
  
  reset: function() {
    var password = $('user_session_password');
    var confirm = $('user_session_password_confirmation');
    var loginSubmit = $('reset_submit');
    var loadIcon = $('loadicon');
    var errors = "";
    if (password.value == "") {
		  password.addClassName('fieldError');
			errors += "* Please enter a password.\n";
		} else if ((password.value != "") && (password.value != confirm.value)) {
		  password.addClassName('fieldError');
			errors += "* Password and confirmation do not match.\n";
		}
    if (errors == "") {
		  loginSubmit.disabled = true;
		  loadIcon.show();
		  return true
		} else {
		  alert(errors);
		  return false;
		}
  }
}

Map = {
  initialize: function() {
    if (GBrowserIsCompatible()) {
  		var map = new GMap2(document.getElementById("map"));
			var centerLocation = new GLatLng(44.62511399297239, -124.04881954193115);
  		var bayfrontLocation = new GLatLng(44.63159269932607, -124.05015528202057);
			var aquariumLocation = new GLatLng(44.61669097547761, -124.04755353927612);
  		var bayfrontDesc = "<p style=\"line-height:1.2em;\"><strong>Local Ocean Seafoods</strong><br />213 SE Bay Blvd<br />Newport, OR<br />97365</p><p class=\"no-margin\"><a href=\"http://maps.google.com/maps?q=local+ocean+newport+oregon&amp;hl=en&amp;ei=EYwDS-PsM4_KiwOHx83uCw&amp;sll=44.631593,-124.050154&amp;sspn=0.011419,0.007252&amp;ie=UTF8&amp;view=map&amp;f=d&amp;daddr=213+SE+Bay+Blvd,+Newport,+OR+97365-4524&amp;geocode=Cf8jEV5WLx_QFSkGqQIdFiWb-A&amp;ll=44.632047,-124.05015&amp;spn=0.056804,0.076132&amp;z=14\">Get directions</a> | <a href=\"http://maps.google.com/places/us/newport/sw-bay-blvd/213/-local-ocean-seafoods?view=feature&mcsrc=detailed_reviews&num=10&start=0\">Submit a review</a></p>";
			var aquariumDesc = "<p style=\"line-height:1.2em;\"><strong>Local Ocean Cafe</strong><br />22820 SE Ferry Slip Rd<br />Newport, OR<br />97365</p><p class=\"no-margin\"><a href=\"http://maps.google.com/maps?q=oregon+coast+aquarium+newport+oregon&amp;hl=en&amp;ei=i4wDS--5EKOOiAOIionwCw&amp;sll=44.616991,-124.047058&amp;sspn=0.019062,0.038418&amp;ie=UTF8&amp;view=map&amp;f=d&amp;daddr=2820+SE+Ferry+Slip+Rd,+Newport,+OR+97365-5269&amp;geocode=Cdtg0l92ne-LFZLKqAId-i6b-A&amp;ll=44.61679,-124.047618&amp;spn=0.056819,0.076132&amp;z=14\">Get directions</a> | <a href=\"http://maps.google.com/places/us/newport/sw-bay-blvd/213/-local-ocean-seafoods?view=feature&mcsrc=detailed_reviews&num=10&start=0\">Submit a review</a></p>";
  		map.addControl(new GSmallMapControl());
  		map.setCenter(centerLocation, 13);
  		bayfront = new GMarker(bayfrontLocation);
  		GEvent.addListener(bayfront, "click", function() {
  			map.openInfoWindow(bayfrontLocation, bayfrontDesc);
  		});
			$('bayfront').observe('click', function() {
				map.openInfoWindow(bayfrontLocation, bayfrontDesc);
				map.panTo(bayfrontLocation);
				map.setZoom(14);
				$('header').scrollTo();
			});
			aquarium = new GMarker(aquariumLocation);
  		GEvent.addListener(aquarium, "click", function() {
  			map.openInfoWindow(aquariumLocation, aquariumDesc);
  		});
			$('aquarium').observe('click', function() {
				map.openInfoWindow(aquariumLocation, aquariumDesc);
				map.panTo(aquariumLocation);
				map.setZoom(14);
				$('header').scrollTo();
			});
		  map.addOverlay(bayfront);
	  	map.addOverlay(aquarium);
  	}
  }
}

Newsletter = {
	validate: function() {
		var email = $('subscribe_email');
		var subscribeLoader = $('subscribe_loader');
		var subscribePrivacy = $('subscribe_privacy');
		var subscribeSubmit = $('subscribe_submit');
		var errors = "";
		if ((email.value == "") || !regExpEmail.test(email.value)) {
		  email.addClassName('fieldError');
			errors += "* Please enter a valid email address.\n";
		}
		if (errors == "") {
			email.removeClassName('fieldError');
			subscribeSubmit.disabled = true;
			subscribeLoader.show();
			subscribePrivacy.hide();
			return true;
		} else {
			alert(errors);
			return false;
		}
	}
}

Event.observe(window, 'dom:loaded', Global.setup);