/* -----------------------------------------------------------
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 regExpEmail = /\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/;
var regExpPhone = /^\D?(\d{3})\D?\D?(\d{3})\D?(\d{4})$/;
var regExpApiKey = /^[0-9a-z]{32}(-us[12]{1})?$/;
var defaultTextAreaHeight = 180;
var expandedTextAreaHeight = 500;
var textAreaThreshold = 900;

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

Campaign = {
	removeLinks: function() {
		$$('#campaign_preview a').each(function(link) {
			link.href = "javascript:return false;";
		});
	},
	
	toggleWhy: function() {
		$('why').appear({duration:0.3});
		$('why').blindDown({duration:0.3});
		$('why-link').remove();
	},
	
	updateList: function() {
		var listID = $('campaign_list_id').getValue();
		var listName = $('campaign_list_id').options[$('campaign_list_id').selectedIndex].text;
		lists.each(function(list, index) {
			if (list[0] == listID) {
				if (list[1] != '') {
					$('campaign_from_email').value = list[1];
					$('campaign_from_email').highlight({duration:0.5});
				}
				if (list[2] != '') {
					$('campaign_from_name').value = list[2];
					$('campaign_from_name').highlight({duration:0.5});
				}
				if (list[3] != '') {
					$('campaign_subject').value = list[3];
					$('campaign_subject').highlight({duration:0.5});
				}
				$('preview_list').update(listName + ' (' + list[4] + ' recipients)');
			}
		});
	},
	
	updatePreview: function() {
		var templateID = $('campaign_template_id').getValue();
		var templateName = $('campaign_template_id').options[$('campaign_template_id').selectedIndex].text;
		if (templateID < 5) {
			if ($('mc-hdr').style.display == 'none') {
				$('mc-hdr').appear({duration:0.2});
				$('mc-hdr').blindDown({duration:0.2});
				if ($('mc-buttons')) {
					$('mc-buttons').appear({duration:0.2});
					$('mc-buttons').blindDown({duration:0.2});
				}
				$('mc-ftr').appear({duration:0.2});
				$('mc-ftr').blindDown({duration:0.2});
				$('preview_exp').fade({duration:0.2});
				$('preview_exp').blindUp({duration:0.2});
			}
			$('campaign_preview').removeClassName('dashed');
			$('campaign_preview').addClassName('solid');
			$('campaign_editable_region').value = '';
			$('editable_region_section').hide();
		} else {
			if ($('mc-hdr').style.display != 'none') {
				$('mc-hdr').fade({duration:0.2});
				$('mc-hdr').blindUp({duration:0.2});
				if ($('mc-buttons')) {
					$('mc-buttons').fade({duration:0.2});
					$('mc-buttons').blindUp({duration:0.2});
				}
				$('mc-ftr').fade({duration:0.2});
				$('mc-ftr').blindUp({duration:0.2});
				$('preview_exp').appear({duration:0.2});
				$('preview_exp').blindDown({duration:0.2});
			}
			$('campaign_preview').removeClassName('solid');
			$('campaign_preview').addClassName('dashed');
			// Populate the templates select menu
			var options = $('campaign_editable_region').options;
			options.length = 0;
			var selected_region = 0;
			var tracker = 0;
			regions.each(function(region, index) {
				if (region[0] == templateID) {
					if (region[1] == "main" || region[1] == "content") {
						options[options.length] = new Option(region[1].capitalize(), region[1], true);
						selected_region = tracker;
					} else {
						options[options.length] = new Option(region[1].capitalize(), region[1]);
					}
					tracker++;
				}
			});
			if (options.length == 0) {
				$('editable_region_section').hide();
			} else {
				$('campaign_editable_region').selectedIndex = selected_region;
				$('editable_region_section').show();
			}
		}
		// Update the preview
		$('preview_template').update(templateName);
	},
	
	validate: function() {
		var title = $('campaign_title');
		var subject = $('campaign_subject');
		var fromName = $('campaign_from_name');
		var fromEmail = $('campaign_from_email');
		var listID = $('campaign_list_id');
		var templateID = $('campaign_template_id');
		var region = $('campaign_editable_region');
		var loadIcon = $('campaign_loader');
		var campaignSubmit = $('campaign_submit');
		var errors = "";
		if (title.value == "") {
		  title.addClassName('fieldError');
			errors += "* Please give this campaign a title.\n";
		}
		if (subject.value == "") {
		  subject.addClassName('fieldError');
			errors += "* Please enter a subject.\n";
		}
		if (fromName.value == "") {
		  fromName.addClassName('fieldError');
			errors += "* Please enter a \"from\" name.\n";
		} else if (regExpEmail.test(fromName.value)) {
			fromName.addClassName('fieldError');
			errors += "* \"From name\" cannot be an email address.\n";
		}
		if ((fromEmail.value == "") || !regExpEmail.test(fromEmail.value)) {
		  fromEmail.addClassName('fieldError');
			errors += "* Please enter a valid \"from\" email.\n";
		}
		if (listID.options[listID.selectedIndex].value == "") {
		  listID.addClassName('fieldError');
			errors += "* Please select a mailing list.\n";
		}
		if (templateID.options[templateID.selectedIndex].value == "") {
		  templateID.addClassName('fieldError');
			errors += "* Please select a template.\n";
		} else if (templateID.options[templateID.selectedIndex].value > 5 && region.value == "") {
			region.addClassName('fieldError');
			errors += "* Please choose an editable region.\n";
		}
		if (errors == "") {
		  campaignSubmit.disabled = true;
		  loadIcon.show();
			Lightview.show({
				href: '#patience',
				ref: 'inline',
				options: {
					width: 350,
					height: 190,
					closeButton: false,
					keyboard: false,
					menubar: false,
					overlayClose: false
				}
			});
		  return true
		} else {
		  alert(errors);
		  return false;
		}
	}
}

Contact = {
	validate: function() {
		var name = $('contact_name');
    var email = $('contact_email');
    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 (message.value == "") {
		  message.addClassName('fieldError');
			errors += "* Please enter a brief message.\n";
		}
		if (errors == "") {
		  contactSubmit.disabled = true;
		  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));
	}
}

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 ($('campaign_preview')) Campaign.removeLinks();
		if ($('contact_form')) Contact.setup();
		if ($('flash_notice')) Global.clearFlash();
  },
  
  externalLinks: function() {
    external_links = $$('a[rel=external]');
    external_links.each(function(l) {
      l.writeAttribute('target', '_blank');
    })
  }
}

Newsletter = {
	validate: function() {
		var email = $('subscribe_email');
		var subscribeLoader = $('subscribe_loader');
		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();
			return true;
		} else {
			alert(errors);
			return false;
		}
	}
}

Shop = {
	validate: function() {
		var shop = $('shop');
		var shopSubmit = $('shop_submit');
		var shopLoader = $('shop_loader');
		var errors = "";
		if (shop.value == "") {
		  shop.addClassName('fieldError');
			errors += "* Please enter the URL to your Shopify store.\n";
		} else {
			shop.value = shop.value.replace('http://', '');
		}
		if (errors == "") {
			shop.removeClassName('fieldError');
			shopSubmit.disabled = true;
			shopLoader.show();
			return true;
		} else {
			alert(errors);
			return false;
		} 
	}
}

Store = {
	checkPlan: function(current_plan_id) {
		var plansMenu = $('plan_id');
		var new_plan_id = plansMenu.options[plansMenu.selectedIndex].value;
		if ( new_plan_id != current_plan_id) {
			if (new_plan_id > current_plan_id) {
				return confirm("Are you sure you want to upgrade your plan?");
			} else if (new_plan_id < current_plan_id) {
				return confirm("Are you sure you want to downgrade your plan?");
			} 
		} else {
			return false;
		}
	},
	
	validate: function() {
		var api_key = $('store_mailchimp_apikey');
		var apiLoader = $('store_loader');
		var apiSubmit = $('store_submit');
		var errors = "";
		/* TODO: Better API key validation */
		if ((api_key.value == "") || !regExpApiKey.test(api_key.value)) {
		  api_key.addClassName('fieldError');
			errors += "* Please enter your Mailchimp API key.\n";
		}
		if (errors == "") {
			apiSubmit.disabled = true;
			apiLoader.show();
			return true;
		} else {
			alert(errors);
			return false;
		}
	}
}

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