/* -----------------------------------------------------------
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 = 500;
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();
		$$('.credits_link').each(function(element) { 
			element.observe('click', Global.showCredits)
		});
		if ($('signup_link')) {
			$('signup_link').observe('click', Global.showSignup)
		}
    if ($('flash_notice')) Global.clearFlash();
    if ($('contact_message')) Contact.setup();
		if ($('example_description')) Example.setup();
		if ($('cropper')) Event.observe(window, 'load', Example.crop);
		if ($('post_content')) Post.setup();
		if ($('testimonial_quote')) Testimonial.setup();
  },
  
  externalLinks: function() {
    external_links = $$('a[rel=external]');
    external_links.each(function(l) {
      l.writeAttribute('target', '_blank');
    })
  },

	showCredits: function(event) {
		Event.stop(event);
		Lightview.show({
			href: '/credits',
			rel: 'ajax',
			options: {
				autosize: true,
				topclose:true,
				ajax: {
					onComplete: function() {
						$$('.jo_link').each(function(element) {
							element.writeAttribute('target', '_blank');
							element.observe('click', function() {
								Lightview.hide();
							});
						});
					}
				}
			}
		});
	},

	showSignup: function(event) {
		Event.stop(event);
		Lightview.show({
			href: '/newsletter',
			rel: 'ajax',
			options: {
				autosize: true,
				topclose:true,
				ajax: {
					onComplete: function() {
						$('signup_form').observe('submit', Newsletter.validate);
					}
				}
			}
		});
	}
}

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 = $('loadicon');
    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("canvas"));
  		var pubLocation = new GLatLng(44.649368203636044, -124.05291259288788);
  		var locationHTML = "<p class=\"map-info\" style=\"margin-bottom:1.5em;\"><strong class=\"red uppercase\">Terra Firma Design &amp; Consulting</strong><br />1662 North Coast Highway<br />Newport, OR</p><p class=\"map-info\" style=\"margin:0;\">(541) 265-4774<br /><a href=\"mailto:contact@terra-firma-design.com\">contact@terra-firma-design.com</a></p>";
  		map.addControl(new GSmallMapControl());
  		map.setCenter(pubLocation, 15);
  		marker = new GMarker(pubLocation);
  		GEvent.addListener(marker, "click", function() {
  			map.openInfoWindow(pubLocation, locationHTML);
  		});
  		map.addOverlay(marker);
  	}
  }
}

Newsletter = {
	validate: function(event) {
		Event.stop(event);
		var email = $('signup_email');
		var signupSubmit = $('signup_submit');
		var errors = "";
		if ((email.value == "") || !regExpEmail.test(email.value)) {
		  email.addClassName('fieldError');
			errors += "* Please enter your email address.\n";
		}
		if (errors != "") {
			alert(errors);
			return;
		} else {
			signupSubmit.disabled = true;
		  signupSubmit.value = "Signing up..."
		}
		Lightview.show({
			href: '/newsletter/join',
			rel: 'ajax',
			options: {
				menubar: false,
				autosize: true,
				topclose: true,
				ajax: {
					parameters: Form.serialize('signup_form')/*,
					onComplete: function() {
						window.setTimeout(function() { Lightview.hide(); }, 20000);
					}*/
				}
			}
		});
	}
}

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