/* SEARCH RESULT FUNCTIONS */

function prev_day(prev_day1, prev_day2, vars) {
	document.location='trevornick_searchresult.php?date1='+prev_day1+'&date2='+prev_day2+'&'+vars;
}

function next_day(next_day1, next_day2, vars) {
	document.location='trevornick_searchresult.php?date1='+next_day1+'&date2='+next_day2+'&'+vars;
}

function step2_continue() {
	document.form_step2.submit();
}

function goToLink(url)
{
	document.location = url;
}

function init()
{
	try
	{
		$('hideSite').hide();
		$('termsWindow').hide();
		$('full_totals').hide();
		$('cardDetails').hide();
		$('chequeDetails').hide();
		/*$('partyMember2').hide();
		$('partyMember3').hide();
		$('partyMember4').hide();
		$('partyMember5').hide();
		$('partyMember6').hide();*/
		setRequiredFields('frm');
	} 
	catch (e)
	{
		alert(e.message);
	}
}

function isEmail(element)
{
  var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
  var address = element.value;
	var emailstatus = false;
	if (address != '' && reg.test(address) == false) {
		emailstatus = true;
	}
	return setFieldStatus(element, emailstatus, true);
}

/**
 * hasValue is a Generic Form Field Validator for textboxes
 * this will validate whether the field has a value set
 * @param {Object} element
 */
function hasValue(element)
{
	return setFieldStatus(element, element.value == '' || element.value == 'Please fill in' || element.value == null);
}

function isSelected(element)
{
	return setFieldStatus(element, element.selectedIndex == -1);
}

function isChecked(element)
{
	return setFieldStatus(element, !element.checked);
}

function isTermsChecked(element)
{
	return termsStatus(element, !element.checked);
}


function termsStatus(element, status)
{
	if (status) {
		alert('Please agree to the Terms & Conditions.');
		return false;
	} else
		return true;
}

/**
 * Sets the style of an element based on the status
 * @param {Object} element
 * @param {Boolean} status
 */

function setFieldStatus(element, status, emailflag)
{
	if (status)
	{
		element.removeClassName('requiredTextBox');
		element.addClassName('formItemError');
		if (emailflag)
			element.value = 'Please enter a valid email address';
		else
			element.value = 'Please fill in';
		return false;
	}
	else
	{
		element.removeClassName('formItemError');
		element.addClassName('requiredTextBox');
		return true;
	}
}

/**
 * Hash of Field Validations
 */

var fieldTests = new Hash({mpm_tandc: isTermsChecked, mpm_num_passwordCheck: hasValue, mpm_password: hasValue, mpm_user_name: hasValue, mpm_email: [hasValue, isEmail], mpm_lastname: hasValue, mpm_firstname: hasValue});

/**
 * formValidation is a Generic Form Handling Function
 * 
 * @param {Form Object} formHandler
 * @param {Hash Object} fieldValidations {fieldName: function|[function1, function2...]}
 */

function formValidation(formHandler, fieldValidations)
{
	var obj;
	var validator = {
				fieldTests: fieldValidations, 
				isValid: true,
				setValidation: function (pass) { if (!pass) {this.isValid = false; }},
				fields: $(formHandler).getElementsBySelector('.formItemRequired'),
				run: function(){
							var count = 0;
							obj = this;
							this.fields.each(function(field){
								var inputs = field.getElementsBySelector('input', 'select');
								inputs.each(function(element){
													count = count + 1;
													if (count == 1)
														firstfield = element.id;
													var idx = obj.fieldTests.keys().indexOf(element.name);
													if (idx > -1) {
														if (Object.isArray(obj.fieldTests.get(element.name)))
														{
															obj.fieldTests.get(element.name).each( function(func) {
																						obj.setValidation(func(element));
																		})
														}
														else
														{
															obj.setValidation(obj.fieldTests.get(element.name)(element));
														}
													}
											});
								})
							/* target first missing field - not last one */
							if (!this.isValid) {
								firstele = document.getElementById(firstfield);
								firstele.focus();
							}
							return this.isValid;
					}
				}
	return validator.run();
}

/**
 * setRequired Formats any form elements with the formItemRequired class
 * @param {Form Object} formHandler
 */

function setRequiredFields(formHandler)
{
	$fields = $(formHandler).getElementsBySelector('.formItemRequired');
	$fields.each( function(element) 
				  {
					label = element.getElementsByTagName('label')[0];
					label.innerHTML += '<span class="required">*</span>';
				  } 
				)
}

function showTerms()
{
	$('hideSite').show();
	$('termsWindow').show();
	window.scrollTo(0,0);
}

function hideTerms()
{
	$('hideSite').hide();
	$('termsWindow').hide();
}

function calendarInterface()
{
	$('hideSite').show();
	$('calendarInterface').show();
	window.scrollTo(0,0);
}

function hideCalendarInterface()
{
	$('hideSite').hide();
	$('calendarInterface').hide();
}

function searchInterface()
{
	$('hideSite').show();
	$('searchInterface').show();
	window.scrollTo(0,0);
}

function hideSearchInterface()
{
	$('hideSite').hide();
	$('searchInterface').hide();
}

function plannerInterface()
{
	$('hideSite').show();
	$('plannerInterface').show();
	window.scrollTo(0,0);
}

function hidePlannerInterface()
{
	$('hideSite').hide();
	$('plannerInterface').hide();
}

function siteLogin()
{
	$('hideSite').show();
	$('siteLogin').show();
	window.scrollTo(0,0);
}

function hideSiteLogin()
{
	$('hideSite').hide();
	$('siteLogin').hide();
}

function forgotLogin()
{
	document.form_forgot.email.value = '';
	$('forgotresponse').innerHTML = '';
	$('siteLogin').hide();
	$('forgotLogin').show();
	window.scrollTo(0,0);
}	

function hideForgotLogin()
{
	$("forgotresponse").hide();
	$('forgotLogin').hide();
	$('siteLogin').show();
}

function hideResponse()
{
	$("forgotresponse").hide();
	$("loginresponse").hide();
}

function checkLoginStatus()
{
	var URL = unescape(window.document.location);
	if (URL.indexOf("?") > -1) {
		var list1 = URL.split("?");
		var list2 = list1[1].split("=");
		var variable = list2[0];
		var returnstatus = list2[1];
		if (variable == 'status' && returnstatus == 'NOK') {
			$("loginresponse").innerHTML = 'We did not find an account with your email address. Please try again!';
			$("loginresponse").show();
		}
	}
}

function sendLoginDetails()
{
	var email = document.form_forgot.email.value;
	var geturl = '/login/forgot.php?email=' + email;
	new Ajax.Request(geturl, {
		method: 'get',
		onSuccess: function(response) {
			if (response.responseText == 'OK') {
				$("forgotresponse").innerHTML = 'Thank you! You will receive an email with your login details in a few moments.';
				$("forgotresponse").show();
			} else if (response.responseText == 'NOK') {
				$("forgotresponse").innerHTML = 'We did not find an account with your email address. Please try again!';
				$("forgotresponse").show();
			}
		},
		onFailure: function() {
			$("forgotresponse").innerHTML = 'We did not find an account with your email address. Please try again!';
			$("forgotresponse").show();
		}
	});
}

function customerLogInCancel() {
	$('hideSite').hide();
	$('logInBox').hide();
}

/**
 * customerLogIn displays a logIn Prompt
 */

function customerLogIn()
{
	$('hideSite').show();
	$('logInBox').show();
	window.scrollTo(0,0);
} 

/**
 * logIn function controls the display of the login process 
 * @param {Object} formHandler
 */

var logInValidation = new Hash({userName: hasValue, password: hasValue});

function logIn(formHandler)
{
	if (formValidation(formHandler, logInValidation))
	{
		$('hideSite').hide();
		$('logInBox').hide();
		$('accountDetails').hide();	
	}
	LogInAjaxCall(document.customerLogInForm.userName.value, document.customerLogInForm.password.value);
	return false;
}

/**
 * logInFailed is call if the user login fails more then 3 times
 */
 
var ajHandler;

function logInFailed()
{
	ajax = new Ajax.Request('help.php?login_link=', { method: 'post', parameters: {email: document.customerLogInFailed.userEmail.value}, onSuccess: function (response, data)
							{
								$('hideSite').hide();
								$('logInBox').hide();
								$('logInFailedBox').hide();
								$('accountDetails').hide();	
								alert('an email will be sent to you shortly');
							}});
}

function open_browser_window(theURL, winName, features) {
 	window.open(theURL, winName, features);
}