$(document).ready(function() {
	/* Address Lookup */
	if($("#AddressLookup").length > 0) { // I don't think this is needed any more
		var addressLookup = $("#AddressLookup");
		addressLookup.show();
		addressLookup.click(function() { lookupAddress(); });
		$(".closeBox").click(function() { closeBox(); });
		
		/* Reset of address is changed */
		$("#flatNumber").change( function() { resetPaf(); } );
		$("#houseName").change( function() { resetPaf(); } );
		$("#houseNumber").change( function() { resetPaf(); } );
		$("#address1").change( function() { resetPaf(); } );
		$("#address2").change( function() { resetPaf(); } );
		$("#address3").change( function() { resetPaf(); } );
		$("#city").change( function() { resetPaf(); } );
		$("#county").change( function() { resetPaf(); } );
		$("#postcode").change( function() { resetPaf(); } );
	}
	
	$("#registrationForm").submit(function() {
		/*var either = [
			[$("#houseNumber"), $("#houseName")]
		];*/
		var validChars = {
			otherTitle		: /^[a-zA-Z\(\)' -]+$/,
			firstName		: /^[a-zA-Z\(\)' -]+$/,
			surname			: /^[a-zA-Z\(\)' -]+$/,
			/*houseNumber		: /^[a-zA-Z0-9\(\)#&,\/\.\? -]+$/,
			houseName		: /^[a-zA-Z0-9\(\)#&,\/\. -]+$/,*/
			postcode		: /^[a-zA-Z0-9\(\) -]+$/,
			addressLine1	: /^[a-zA-Z0-9\(\)#&,\/\. -]+$/,
			addressLine2	: /^[a-zA-Z0-9\(\)#&,\/\. -]+$/,
			addressLine3	: /^[a-zA-Z0-9\(\)#&,\/\. -]+$/,
			city			: /^[a-zA-Z0-9\(\)'\. -]+$/,
			county			: /^[a-zA-Z0-9\(\)' -]+$/,
			telephone		: /^[0-9\(\)\+ -]+$/,
			mobile			: /^[0-9\(\)\+ -]+$/
		};
		
		var date = {
			year	: $(document.getElementById("dateOfBirth[year]")).val(), 
			month	: $(document.getElementById("dateOfBirth[month]")).val(), 
			day		: $(document.getElementById("dateOfBirth[day]")).val()
		};
		var options = {
			// either		: either,
			validChars	: validChars,
			DoB			: { date : date, age : 18 }
		};
		
		if($("#registrationForm").formValidate(options) == true) {
			if($("#email").val() == "") {
				begForEmail();
				return false;
			} else {
				return true;
			}
		} else {
			return false;
		}
	});
	
	/* Events */
	$("#country").change(function() { lookupToggle(this.value); });
	$("#gender").change(function() { titleSync(this.value); });
	$("#title").change(function() { genderSync(this.value); titleOtherSync(this.value); });
	$("#optIns[1]").click(function() { optInSync(this); });
	$("#optIns[2]").click(function() { optInSync(this); });
	
	/* Firefox */
	optInSync(document.getElementById("optIns[1]"));
	optInSync(document.getElementById("optIns[2]"));
	
	/* Read more */
	document.getElementById("readMore").style.display = "none";
	$(".readMore").click(function(){
		var arrow = $("#readMore").css("display") == "none" ? "arrow-down" : "arrow";
		this.style.backgroundImage = "url(/assets/images/promotions/" + arrow + ".jpg)";
		$("#readMore").slideToggle();
	}).css({ cursor : "pointer" });
	
	$("#title").focus(); //buggers up the other stuff
});

function setOpacity(aElement, aValue) {
	aElement.style.opacity = aValue/10;
	aElement.style.filter = 'alpha(opacity=' + aValue*10 + ')';
}

function begForEmail() {
	showWindowMask();
	showBeggar();
	
	var begSubmit = document.getElementById("submitBegEmail");
	var begCancel = document.getElementById("cancelBegEmail");

	begSubmit.onclick = begSubmitForm;
	begCancel.onclick = begCancelForm;
}

function begSubmitForm() {
	var begEmail = document.getElementById("begEmail");
	var begEmailConfirm = document.getElementById("begEmailConfirm");
	var formError = false;
	if(begEmail.value == "" || /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(begEmail.value) == false) {
		begEmail.parentNode.className = "formError";
		formError = true;
	} else {
		begEmail.parentNode.className = "";
	}
	
	if(begEmailConfirm.value == "" || begEmailConfirm.value != begEmail.value) {
		begEmailConfirm.parentNode.className = "formError";
		formError = true;
	} else {
		begEmailConfirm.parentNode.className = "";
	}
	if(formError == false) {
		document.getElementById("email").value = begEmail.value;
		document.getElementById("emailConfirm").value = begEmail.value;
		hideBeggar();
		return true;
	} else {
		return false;
	}
}
function begCancelForm() {
	hideBeggar();
	document.getElementById("registrationForm").submit();
	return true;
}

function showWindowMask() {
	if (!document.getElementById("ScreenMask")) {
		/* Create the mask */
		var width = windower.getFullSize("width");
		var height = windower.getFullSize("height");
		
		var mask = document.createElement("div");
		mask.id = "ScreenMask";
		mask.style.display = "none";
		mask.style.width = width + "px";
		mask.style.height = height + "px";
		setOpacity(mask, 5);
		mask.style.position = "absolute";
		mask.style.top = "0";
		mask.style.left = "0";
		mask.style.background = "#fff";
		mask.style.display = "block";
		
		document.body.appendChild(mask);
		
		mask.onclick = hideBeggar;
		window.onresize = beggarSetup;
		window.onscroll = beggarSetup;
		
	} else {
		mask = document.getElementById("ScreenMask");
		mask.style.display = "block";
	}
}

function beggarSetup() {
	var beggar = document.getElementById("Beggar");
	var mask = document.getElementById("ScreenMask");
	
	mask.style.width = windower.getFullSize("width") + "px";
	mask.style.height = windower.getFullSize("height") + "px";
	
	beggar.style.left = windower.getSize("width") / 2 - 300 + "px";
	beggar.style.top = windower.getScroll("height") + 100 + "px";
}

function showBeggar() {
	var begEmail = document.getElementById("begEmail");
	var beggar = document.getElementById("Beggar");
	var selects = document.getElementsByTagName("select");
	
	if ($.browser.msie == true && parseInt($.browser.version) < 7) {
		for (var i = 0; i < selects.length; i++) {
			selects[i].style.visibility = "hidden";
		}
	}
	
	beggar.style.top = windower.getScroll()._y + 100 + "px";
	beggar.style.left = windower.getSize()._x / 2 - 300 + "px";
	beggar.style.display = "block";
	begEmail.focus();
}
function hideBeggar() {
	var beggar = document.getElementById("Beggar");
	var mask = document.getElementById("ScreenMask")
	var selects = document.getElementsByTagName("select");
	
	if ($.browser.msie == true && parseInt($.browser.version) < 7) {
		for (var i = 0; i < selects.length; i++) {
			selects[i].style.visibility = "visible";
		}
	}
	beggar.style.display = "none";
	mask.style.display = "none";
}

function resetPaf() {
	$("#pafKey").val("");
	$("#AddressLookup").html("Look up address<div></div>");
	$("#AddressLookup").attr({ disabled:"" });
}
function closeBox() {
	$("#AddressLookupBox").slideUp();
	$("#AddressLookup").html("Look up address<div></div>");
	$("#AddressLookup").attr({disabled: ""});
	$("#AddressesList").remove();
	$("#noAddress").remove();
	if( $.browser.msie == true && parseInt( $.browser.version ) < 7 ) {
		$("#country").show();
	}
}

/* Sort address functions */
function lookupAddress() {
	var lookupButton = $("#AddressLookup");
	var building = $("#houseNumber");
	var postcode = $("#postcode");
	
	if( !postcode.attr("value") ) {
		alert("Please enter a postcode to help find your address.");
		return false;
	}
	
	lookupButton.html("Loading...<div></div>");
	lookupButton.attr({disabled : "disabled"});
	
	var addressProperties = {
		/*building : building.attr("value"),*/
		postcode : postcode.attr("value")
	}
	
	$.ajax({
		type: "GET",
		error: function(a, b, c) {
			alert(a+"\n"+b+"\n"+c);
			lookupButton.html("No addresses found<div></div>");
		},
		dataType: "json",
		url: "/assets/json/address-lookup.php",
		data: addressProperties,
		success: function(json) { sortAddressData(json); }
	});
}
function sortAddressData(json) {
	var lookupButton = $("#AddressLookup");
	
	if( json.error != "" ) {
		lookupButton.html(json.error + ".<div></div>");
		lookupButton.attr({disabled : ""});
		return false;
	}
	
	else if( json.count == 0 ) {
		lookupButton.html("No addresses found.<div></div>")
		return false;
	}
	
	else if( json.count > 1 ) {
		populateAddressLookupBox(json);
	}
	
	else if( json.count == 1 ) {
		populateAddressForm(json)
	}
}

function populateAddressLookupBox(json) {
	var addressBox = $("#AddressLookupBox");
	var addressHeading = $("#AddressLookupBox h2");
	addressHeading.addClass("loading");
	if( $.browser.msie == true && parseInt( $.browser.version ) < 7 ) {
		$("#country").hide();
	}
	
	addressBox.slideDown("medium");
	addressBox.append('<ul class="arrows" id="AddressesList"></ul>');
	var addressesList = $("#AddressesList");
	for( var address in json.addresses ) {
		addressesList.append('<li id="AddressId-' + json.addresses[address].id + '">' + json.addresses[address].organisation_name + " " + json.addresses[address].line1 + " " + json.addresses[address].line2 + " " + json.addresses[address].line3 + " " + '</li>');
	}
	addressBox.append('<p class="closeBox" id="noAddress">None of the above, I will enter my address manually</p>');
	$("#noAddress").click(function() { closeBox(); });
	addressHeading.removeClass("loading");
	
	$("#AddressLookupBox li").click( function() {
		populateAddressForm(json, this.id);
	});
}

function populateAddressForm(json, id) {
	$("#AddressLookupBox h2").addClass("loading");
	var id = id.replace("AddressId-", "");
	for( var address in json.addresses ) {
		if( json.addresses[address].id == id ) {
			var selectedAddress = json.addresses[address];
		}
	}
	
	if( selectedAddress.organisation_name != "" ) {
		// $("#address1").attr( {value : selectedAddress.line1} );
		$("#address1").attr( {value : selectedAddress.organisation_name} );
		$("#address2").attr( {value : selectedAddress.line1} );
		$("#address3").attr( {value : selectedAddress.line2} );
	} else {
		$("#address1").attr( {value : selectedAddress.line1} );
		$("#address2").attr( {value : selectedAddress.line2} );
		$("#address3").attr( {value : selectedAddress.line3} );
	}
	
	
	
	$("#city").attr( {value : selectedAddress.post_town} );
	if( selectedAddress.post_town.toLowerCase() == "london" && selectedAddress.county == "" ) {
		$("#county").attr( {value : "London"} );
	} else {
		$("#county").attr( {value : selectedAddress.county} );
	}
	$("#postcode").attr( {value : selectedAddress.postcode} );
	$("#pafKey").attr( {value : selectedAddress.id} );
	$("#AddressLookupBox h2").removeClass("loading");
	closeBox();
}
function lookupToggle(aValue) {
	var addressLookupButton = $("#AddressLookup");
	if(aValue != "GB") {
		addressLookupButton.fadeOut("fast");
	} else if($("#country").css("display") != "block") {
		addressLookupButton.fadeIn("fast");
	}
}
function titleOtherSync(aValue) {
	var otherTitle = $("#otherTitle");
	if(aValue == "Other") {
		otherTitle.attr("readonly", "");
		otherTitle.attr("disabled", "");
		otherTitle.removeClass("disabled");
		$("#otherTitle").focus();
	} else {
		otherTitle.val("");
		otherTitle.attr("readonly", "readonly");
		otherTitle.attr("disabled", "disabled");
		if(!otherTitle.hasClass("disabled")) {
			otherTitle.addClass("disabled");
		}
	}
}
function titleSync(aValue) {
	if($("#title").val() != "Other") {
		var title = document.getElementById("title");
		var otherTitle = document.getElementById("otherTitle");
		if(title.value != "Other") {
			if( aValue == "M" && title.value != "Mr") {
				title.value = "Mr";
			} else if( aValue != "M" || aValue != "Other" ) {
				title.value = "Mrs";
			}
		}
	}
}
function genderSync(aValue) {
	var gender = document.getElementById("gender");
	if(aValue != "Other") {
		if( aValue == "Mr" && gender.value != "M") {
			gender.value = "M";
		} else if( aValue != "Mr") {
			gender.value = "F";
		}
	}
}

function optInSync(aElem) {
	if( aElem.checked == true ) {
		if( aElem.name == "optIns[1]" ) {
			$("#email").addClass("required");
		} else if( aElem.name == "optIns[2]" ) {
			$("#mobile").addClass("required");
		}
	} else {
		if( aElem.name == "optIns[1]" ) {
			$("#email").removeClass("required");
		} else if( aElem.name == "optIns[2]" ) {
			$("#mobile").removeClass("required");
		}
	}
}

