// DATEPICKER
$.datepick.setDefaults({
   	showOn: 'focus',
	firstDay: 6,
	dateFormat: 'dd/mm/yy',
	minDate: '-1y',
	maxDate: '+2y',
	closeAtTop: false,
	changeMonth: false, changeYear: false
});

// FORM VALIDATION
$.validator.setDefaults({
	//add error class to container
	highlight: function (element, errorClass, validClass) {
        $(element).parents('.field').addClass(errorClass).removeClass(validClass);
	},
	//add valid class to container
	unhighlight: function (element, errorClass, validClass) {
		$(element).parents('.field').addClass(validClass).removeClass(errorClass);
	},
	// Get error label in correct place (mainly for checkbox/radio)
	errorPlacement: function (error, element) {
		error.appendTo(element.parents('.field'));
	}
});
// Add date dd/mm/yyyy format (dateUK)
$.validator.addMethod('dateUK', function (value, element) {
	return this.optional(element) || /^[\d]{2}\/[\d]{2}\/[\d]{4}/.test(value);
}, 'Date must be in dd/mm/yyyy format');
// Add custom email format (emailCust)
$.validator.addMethod('emailCust', function (value, element) {
	return this.optional(element) || /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/.test(value);
}, 'Email must be a valid email address');
// Show loader
function showLoader(form){
	form.find('.submitContainer .button, .submitContainer .cancelLink').hide();
	form.find('.submitContainer').append('<div class="loader"></div>');
}
// Hide loader
function hideLoader(form){
 	form.find('.submitContainer .loader').hide();
	form.find('.submitContainer .button, .submitContainer .cancelLink').show();
}

// WATERMARKING
function watermarking(){

    // CLEAR/CONTROL FORM FIELDS (watermarking)
	$('.textBox INPUT, .textArea TEXTAREA').focus(function () {
		// Get title(original value) and current value
		var title = $(this).attr('title');
		var value = $(this).val();

		// Clear if original value only
		if (title == value) {
			$(this).val("");
		}
	});
	$('.textBox INPUT, .textArea TEXTAREA').blur(function () {
		// Get title(original value) and current value
		var title = $(this).attr('title');
		var value = $(this).val();

		// If empty, re-populate
		if (value == "") {
			$(this).val(title);
		}
	});

    $('FORM .submit').click(function () {
		 $(this).parents('FORM').find('.textBox INPUT, .textArea TEXTAREA').each(function () {
			// Get title(original value) and current value
			var title = $(this).attr('title');
			var value = $(this).val();

			// Clear if original value only
			if (title == value) {
				$(this).val("");
			}
		});
    });

}

// BUTTONS FOR IE
function doButtons(){
    // Add rounded corners to button
    if(! Modernizr.borderradius){
        $('.button').each(function(){
            $(this).append('<div class="tl pngFix" /><div class="tr pngFix" /><div class="bl pngFix" /><div class="br pngFix" />');
        });
    }
}

// RE-ATTACH EVENTS
function init(){
    // Buttons (IE)
    doButtons();

    // Cufon refresh
    Cufon.refresh();
}

// DOCUMENT READY
$(document).ready(function () {

    // INIT
    init();
    watermarking();

    // CUFON
	Cufon.replace('H1, H2, H3, H4');
    Cufon.replace('#leftNav LI', {
		hover: true
	});

	// TWITTER
	$('#twitter').getTwitter({
		userName: "ridersretreat",
		numTweets: 1,
		slideIn: false,
		showHeading: false
	});

    // FANCYBOX
    $('.fancybox, .fancybox').live('mouseenter', function(){
        $(this).fancybox({
            'afterShow': function() {
                init();
            }
        });

        return false;
    });

    // DATEPICKER
    $('FORM').find('.datePick').live('focus', function(){
         $(this).find('INPUT').datepick();
    });
	// DateRange (arr/dep)
    $('FORM').find('#startDate, #endDate').live('focus', function(){
        $(this).datepick({beforeShow: customRange});
    	function customRange(input) {
    	    return {minDate: (input.id == 'endDate' ?
    	        $('#startDate').datepick('getDate') : null),
    	        maxDate: (input.id == 'startDate' ?
    	        $('#endDate').datepick('getDate') : null)};
    	}
    });
	// dob
    $('FORM').find('.dob').live('focus', function(){
        $(this).find('INPUT').datepick({minDate: '-100y', maxDate: '+1y', yearRange: '1900:2100', changeMonth: true, changeYear: true});
    });

    // FORM SUBMIT
    $('FORM .submit').live('click', function () {
        $(this).parents('FORM').submit();
        return false;
	});

    // CONTACT
	$('#contact').validate({
		//set the rules for fields
		rules: {
			name: 'required',
			email: {
				required: true,
				emailCust: true
			},
			message: 'required'
		},
		//set messages
		messages: {
			name: 'Please enter your name',
			email: 'Please enter a valid email address',
			message: 'Please enter your message'
		},
		// AJAX submit
		submitHandler: function (form) {
			$(form).ajaxSubmit({
				beforeSubmit: function (arr, form, options) {
					showLoader(form);
				},
				success: function (responseText, statusText, xhr, form) {
					hideLoader(form);
					// Hide form & replace form with success/error message
					form.replaceWith('<div class="messageContainer">'+ responseText +'</div>');
				}
			});
		}
	});

    // LOGIN
	$('#loginForm').validate({
		//set the rules for fields
		rules: {
			loginEmail: {
				required: true,
				emailCust: true
			},
			loginDate: {
				required: true,
				dateUK: true
			}
		},
		//set messages
	  	messages: {
			loginEmail: 'Please enter a valid email address',
			loginDate: 'Please enter a valid date (dd/mm/yyyy)'
		},
		errorPlacement: function (error, element) {
			error.appendTo(element.parents('FORM').find('.errorContainer'));
		},
		// AJAX submit
		submitHandler: function (form) {
			$(form).ajaxSubmit({
				beforeSubmit: function (arr, form, options) {
                	showLoader(form);
				},
				success: function (responseText, statusText, xhr, form) {
                    // If response text is false display error
                    if(responseText == 'false'){
                    	hideLoader(form);
						// Display success/error message
						form.find('.errorContainer').replaceWith('<div class="errorContainer field error"><div class="errorState"></div><label class="error">No matching booking was found<br /><a class="forgottenLogin" href="/forgottenLogin.php">Forgotten your login details?</a></label></div>');
					} else { // Else, redirect
                    	window.location = responseText;
					}
				}
			});
		}
	});

});
