jQuery(document).ready(function($){
	var waiting_for_callback = false;

	var is_displayed_within_colorbox = function(){
		var element = $('#colorbox #cboxWrapper #cboxContent #popup__signup_for_mailing_list');
		return (
			(element.length === 1) &&
			(element.is(':visible'))
		);
	};

	var show_error_message = function(){
		var error_div = $('#popup__signup_for_mailing_list .popup__signup_for_mailing_list__error');
		if (error_div.is(':hidden')){
			error_div.css('display','block');	// in IE, .show() sets: {display:inline;}
			if (is_displayed_within_colorbox()){
				$.colorbox.resize();
			}
		}
	};

	var hide_error_message = function(){
		var error_div = $('#popup__signup_for_mailing_list .popup__signup_for_mailing_list__error');
		if (error_div.is(':not(:hidden)')){
			error_div.hide();
			if (is_displayed_within_colorbox()){
				$.colorbox.resize();
			}
		}
	};

	var show_saving_overlay = function(){
		waiting_for_callback = true;

		var container_element;
		if (is_displayed_within_colorbox()){
			container_element = $('#colorbox #cboxWrapper #cboxContent');
		}
		else {
			container_element = $('#popup__signup_for_mailing_list');
		}
		$('#popup__signup_for_mailing_list .popup__signup_for_mailing_list__overlay').width( container_element.width() ).height( container_element.height() ).show();
	};

	var hide_saving_overlay = function(){
		waiting_for_callback = false;
		$('#popup__signup_for_mailing_list .popup__signup_for_mailing_list__overlay').hide();
	};

	$('#popup__signup_for_mailing_list .popup__signup_for_mailing_list__form #fire_form').click(function(event){
		event.stopImmediatePropagation();
		event.preventDefault();

		if (waiting_for_callback){return;}
		show_saving_overlay();

		var email		= $('#popup__signup_for_mailing_list .popup__signup_for_mailing_list__form #email').val();
		var fname		= $('#popup__signup_for_mailing_list .popup__signup_for_mailing_list__form #fname').val();
		var lname		= $('#popup__signup_for_mailing_list .popup__signup_for_mailing_list__form #lname').val();
		var referrer	= $('#popup__signup_for_mailing_list .popup__signup_for_mailing_list__form #referrer').val();

		var callback_success = function(){
			hide_saving_overlay();
			if (is_displayed_within_colorbox()){
				$.colorbox.close();
			}

			$('#popup__signup_for_mailing_list').empty().append( $('#popup__signup_for_mailing_list__success') );
		};

		var callback_failure = function(){
			hide_saving_overlay();
			show_error_message();
		};

		if (!referrer){
			referrer = '2';	// default to: "website footer"
		}
		if (
				(!email)
			||	(!fname)
			||	(!lname)
		){
			callback_failure();
		}
		else {
			hide_error_message();
			signup_for_mailing_list(email, fname, lname, referrer, callback_success, callback_failure);
		}
	});

	$('#popup__signup_for_mailing_list .popup__signup_for_mailing_list__form #clear_form').click(function(event){
		event.stopImmediatePropagation();
		event.preventDefault();

		$('#popup__signup_for_mailing_list .popup__signup_for_mailing_list__form #email').val('');
		$('#popup__signup_for_mailing_list .popup__signup_for_mailing_list__form #fname').val('');
		$('#popup__signup_for_mailing_list .popup__signup_for_mailing_list__form #lname').val('');

		hide_error_message();
	});

});

jQuery(document).ready(function($){
	$('.fake_email_signup_form .email_address[placeholder]').placeholder({
		"inputWrapper": ''
	});	

	$('.fake_email_signup_form .open_signup_form').live('click', function(event){
		event.stopImmediatePropagation();
		event.preventDefault();

		$('#popup__signup_for_mailing_list .popup__signup_for_mailing_list__overlay').hide();
		$('#popup__signup_for_mailing_list .popup__signup_for_mailing_list__error').hide();
		$('#popup__signup_for_mailing_list .popup__signup_for_mailing_list__form #clear_form').click();

		var $this			= $(this);
		var fake_form		= $this.closest('.fake_email_signup_form');
		var email_address	= fake_form.find('.email_address').val();
		if (typeof email_address !== 'string') {email_address = '';}
		$('#popup__signup_for_mailing_list .popup__signup_for_mailing_list__form #email').val(email_address);

		var referrer;
		if (fake_form.is('[referrer]')){
			referrer = parseInt( fake_form.attr('referrer') );
			if (
				(! isNaN(referrer)) &&
				(referrer > 0)	// indices are 1-based
			){
				$('#popup__signup_for_mailing_list .popup__signup_for_mailing_list__form #referrer').val('' + referrer);
			}
		}

		var user_options;
		var options = {
			"inline"		: true,
			"href"			: "#popup__signup_for_mailing_list",
			"scrolling"		: false,
			"transition"	: "none"
		};
		if (fake_form.is('[options]')){
			user_options = fake_form.attr('options');
			if (user_options) {																// enables colorbox options to be declared inline on a per-element basis.
				user_options = eval("(" + user_options + ")");								// note: $.parseJSON() won't work in this case, because hook functions are not proper JSON data values. (ie: '{"onComplete":function(){}}')
			}
			if (typeof user_options === 'object') {
				$.extend(true, options, user_options);

				if (typeof options.onInitialization === 'function') {
					options.onInitialization( fake_form, options );							// adds an additional hook, which is only run once during this initialization step. Parameters passed: (1) a reference to the a.popup element, (2) a reference to the options object
					delete options.onInitialization;
				}
			}
		}

		$.colorbox(options);
	});

});
