function sunshine_checkout_contact_fields()
{
    global $sunshine;
    ?>
	<fieldset>
	<h2><?php 
    _e('Account & Contact Information', 'sunshine');
    ?>
</h2>
	<div class="field field-left required"><label><?php 
    _e('Email', 'sunshine');
    ?>
<span class="required">*</span> <input type="text" name="email" value="<?php 
    echo esc_attr(isset($_POST['email']) ? $_POST['email'] : SunshineUser::get_user_meta('email'));
    ?>
" /></label></div>
	<div class="field field-right"><label><?php 
    _e('Phone', 'sunshine');
    ?>
<input type="tel" name="phone" value="<?php 
    echo esc_attr(SunshineUser::get_user_meta('phone'));
    ?>
" /></label></div>
	<?php 
    if (!is_user_logged_in()) {
        ?>
		<div class="field field-left <?php 
        if (!$sunshine->options['allow_guest_checkout']) {
            echo 'required';
        }
        ?>
"><label><?php 
        _e('Password', 'sunshine');
        if (!$sunshine->options['allow_guest_checkout']) {
            echo '<span class="required">*</span>';
        }
        ?>
<input type="password" name="password" value="" /></label><span class="field-desc"><?php 
        if ($sunshine->options['allow_guest_checkout']) {
            _e('Optionally set a password to create an account', 'sunshine');
        }
        ?>
</span></div>
	<?php 
    }
    ?>
	<?php 
    do_action('sunshine_checkout_contact_fields');
    echo '</fieldset>';
    ?>
	<script>
	jQuery(document).ready(function($){
		var typingTimer;                //timer identifier
		var doneTypingInterval = 1000;  //time in ms, 5 second for example
		var $input = $('input[name="email"]');

		//on keyup, start the countdown
		$input.on('keyup', function () {
		  	clearTimeout(typingTimer);
		  	typingTimer = setTimeout(sunshine_done_email, doneTypingInterval);
		});

		//on keydown, clear the countdown 
		$input.on('keydown', function () {
		  	clearTimeout(typingTimer);
		});
		$input.on('focusout', function () {
		  	sunshine_done_email();
		});

		//user is "finished typing," do something
		function sunshine_done_email() {
			$.ajax({
			  	type: 'POST',
			  	url: '<?php 
    echo admin_url('admin-ajax.php');
    ?>
',
			  	data: {
			  		action: 'sunshine_checkout_email_exists',
					email: $input.val()
				},
			  	success: function(data, textStatus, XMLHttpRequest) {
					var obj = jQuery.parseJSON(data);
					$('#sunshine-email-exists-error').remove();
					if ( obj.exists ) {
						$input.after('<span id="sunshine-email-exists-error" class="field-desc error"><?php 
    echo sprintf(__('Email already exists, <a href="%s">please login first</a>', 'sunshine'), wp_login_url(sunshine_current_url(false)));
    ?>
</span>');
					} 
			  	},
			  	error: function(MLHttpRequest, textStatus, errorThrown) {
					alert('Sorry, there was an error with your request');
			  	}
			});
		}
	});
	</script>
	<?php 
}
function sunshine_favorites_lightbox_menu($menu, $image)
{
    global $sunshine;
    if ($sunshine->options['disable_favorites']) {
        return $menu;
    }
    $class = '';
    if (sunshine_is_image_favorite($image->ID)) {
        $class = 'sunshine-favorite';
    }
    if (is_user_logged_in()) {
        $menu .= ' <a href="#" data-image-id="' . $image->ID . '" onclick="sunshine_add_image_to_favorites(this); return false;" class="' . $class . '"><i class="fa fa-heart"></i></a>';
    } else {
        $menu .= '<a href="' . wp_login_url(add_query_arg('sunshine_favorite', $image->ID, sunshine_current_url(false) . '#' . $image->ID)) . '"><i class="fa fa-heart"></i></a>';
    }
    return $menu;
}
function sunshine_update_account()
{
    global $current_user, $sunshine;
    if (isset($_POST['sunshine_update_account']) && $_POST['sunshine_update_account'] == 1) {
        $vars['country'] = isset($_POST['country']) ? $_POST['country'] : '';
        $vars['first_name'] = isset($_POST['first_name']) ? $_POST['first_name'] : '';
        $vars['last_name'] = isset($_POST['last_name']) ? $_POST['last_name'] : '';
        $vars['address'] = isset($_POST['address']) ? $_POST['address'] : '';
        $vars['address2'] = isset($_POST['address2']) ? $_POST['address2'] : '';
        $vars['city'] = isset($_POST['city']) ? $_POST['city'] : '';
        $vars['state'] = isset($_POST['state']) ? $_POST['state'] : '';
        $vars['zip'] = isset($_POST['zip']) ? $_POST['zip'] : '';
        $vars['shipping_country'] = isset($_POST['shipping_country']) ? $_POST['shipping_country'] : '';
        $vars['shipping_first_name'] = isset($_POST['shipping_first_name']) ? $_POST['shipping_first_name'] : '';
        $vars['shipping_last_name'] = isset($_POST['shipping_last_name']) ? $_POST['shipping_last_name'] : '';
        $vars['shipping_address'] = isset($_POST['shipping_address']) ? $_POST['shipping_address'] : '';
        $vars['shipping_address2'] = isset($_POST['shipping_address2']) ? $_POST['shipping_address2'] : '';
        $vars['shipping_city'] = isset($_POST['shipping_city']) ? $_POST['shipping_city'] : '';
        $vars['shipping_state'] = isset($_POST['shipping_state']) ? $_POST['shipping_state'] : '';
        $vars['shipping_zip'] = isset($_POST['shipping_zip']) ? $_POST['shipping_zip'] : '';
        if (isset($_POST['billing_as_shipping']) && $_POST['billing_as_shipping'] == 1) {
            $vars['country'] = isset($_POST['shipping_country']) ? $_POST['shipping_country'] : '';
            $vars['first_name'] = isset($_POST['shipping_first_name']) ? $_POST['shipping_first_name'] : '';
            $vars['last_name'] = isset($_POST['shipping_last_name']) ? $_POST['shipping_last_name'] : '';
            $vars['address'] = isset($_POST['shipping_address']) ? $_POST['shipping_address'] : '';
            $vars['address2'] = isset($_POST['shipping_address2']) ? $_POST['shipping_address2'] : '';
            $vars['city'] = isset($_POST['shipping_city']) ? $_POST['shipping_city'] : '';
            $vars['state'] = isset($_POST['shipping_state']) ? $_POST['shipping_state'] : '';
            $vars['zip'] = isset($_POST['shipping_zip']) ? $_POST['shipping_zip'] : '';
        }
        $vars['billing_as_shipping'] = isset($_POST['billing_as_shipping']) ? $_POST['billing_as_shipping'] : '';
        $vars['phone'] = isset($_POST['phone']) ? $_POST['phone'] : '';
        foreach ($vars as $key => $item) {
            SunshineUser::update_user_meta_by_id($current_user->ID, $key, sanitize_text_field($item));
        }
        $userdata['ID'] = $current_user->ID;
        $userdata['user_email'] = sanitize_email($_POST['email']);
        $userdata['first_name'] = sanitize_text_field($_POST['first_name']);
        $userdata['last_name'] = sanitize_text_field($_POST['last_name']);
        wp_update_user($userdata);
        $sunshine->add_message(__('Account updated', 'sunshine'));
        wp_redirect(sunshine_current_url(false));
        exit;
    }
}
 function can_view_gallery()
 {
     global $post, $current_user;
     if (self::$current_gallery && self::$current_gallery->post_status == 'private' && !current_user_can('sunshine_manage_options')) {
         $allowed_users = get_post_meta(self::$current_gallery->ID, 'sunshine_gallery_private_user');
         if (!in_array($current_user->ID, $allowed_users)) {
             wp_redirect(add_query_arg('sunshine_login_notice', 'private_gallery', wp_login_url(sunshine_current_url(false))));
             exit;
         }
     }
     if (self::$current_gallery && get_post_meta(self::$current_gallery->ID, 'sunshine_gallery_access', true) == 'account' && !is_user_logged_in()) {
         wp_redirect(add_query_arg('sunshine_login_notice', 'gallery_requires_login', wp_login_url(sunshine_current_url(false))));
         exit;
     }
 }