/* -----------------------------------------------------------
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 = 180;
var expandedTextAreaHeight = 400;
var textAreaThreshold = 1000;

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

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 ($('contact_message')) Contact.setup();
		if ($('image_caption')) Photo.setup();
		if ($('event_form')) EventCalendar.setup();
		if ($('recipe_description')) Recipe.setup();
  },
  
  externalLinks: function() {
    external_links = $$('a[rel=external]');
    external_links.each(function(l) {
      l.writeAttribute('target', '_blank');
    })
  }
}

Contact = {
  validate: function() {
    var name = $('contact_name');
    var email = $('contact_email');
    var phone = $('contact_phone');
    var message = $('contact_message');
    var contactSubmit = $('contact_submit');
    var loadIcon = $('contact_loader');
    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 your phone number.\n";
		}
		if (message.value == "") {
		  message.addClassName('fieldError');
			errors += "* Please enter a brief message.\n";
		}
		if (errors == "") {
		  contactSubmit.disabled = true;
		  contactSubmit.value = "Sending..."
		  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 pubLocation = new GLatLng(44.639302, -124.061165);
  		var locationHTML = "<p class=\"map-info\"><strong>Savory Cafe & Pizzeria</strong><br />526 NW Coast Street<br />Newport, OR</p><p class=\"map-info\" style=\"margin:0;\">541-574-9365<br /><a href=\"http://maps.google.com/maps?f=q&source=s_q&hl=en&geocode=&q=Savory+Cafe+Newport+OR&sll=44.612557,-124.049443&sspn=0.113891,0.153465&ie=UTF8&z=15&iwloc=A\" target=\"_blank\">Driving directions</a></p>";
  		map.addControl(new GSmallMapControl());
  		map.setCenter(pubLocation, 14);
  		marker = new GMarker(pubLocation);
  		GEvent.addListener(marker, "click", function() {
  			map.openInfoWindow(pubLocation, locationHTML);
  		});
  		map.addOverlay(marker);
  	}
  }
}

Newsletter = {
  validate: function() {
    var email = $('signup_email');
    var signupSubmit = $('signup_submit');
    var loadIcon = $('signup_loader');
    var errors = "";
    if ((email.value == "") || !regExpEmail.test(email.value)) {
		  email.addClassName('fieldError');
			errors += "* Please enter your email address.\n";
		}
		if (errors == "") {
		  signupSubmit.disabled = true;
			signupSubmit.hide();
		  loadIcon.show();
		  return true
		} else {
		  alert(errors);
		  return false;
		}
  }
}

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