// JavaScript Document

$(document).ready(function() {
	$('.kBanner').each(function() {
		$(this).kBanner({
			width: 399
		});
	});
	/*
	$("form[name=form]").each(function() {
		$(this).validate({
			rules: {
				title: {
					required: true
				},
				firstnames: {
					required: true
				},
				lastname: {
					required: true
				},
				sub_email: {
					required: true,
					email: true
				},
				sub_email_confirm: {
					required: true,
					email: true,
					equalTo: "#sub_email"
				},
				address1_1: {
					required: true
				},
				tel_home: {
					required: true
				},
				address1_postcode: {
					required: true
				}
			}
		});
	});
	*/
	// IMAGINARY
	/*
	$('.imaginary').each(function() {
		var container = $(this);
		container.prepend('\
			<div class="imageHolder">\
				<a href="'+container.children('ul').find('a:first').attr('href')+'" class="image" style="background-image: url('+container.children('ul').find('a:first').attr('rel')+')">\
					<div class="text"><div>'+container.children('ul').find('a:first').attr('title')+'</div></div>\
				</a>\
			</div>\
		');
		container.children('ul').find('a:first').parent().addClass('selected');
		container.append('<div style="clear:both;"></div>');
		container.children('ul').find('a').mouseover(function() {
			$(this).parent().addClass('selected').siblings().removeClass('selected');
			container.find('.image').attr({href: $(this).attr('href'), style: 'background-image: url('+$(this).attr("rel")+')'}).find('.text').children().text($(this).attr('title'));
			return false;
		});
	});
	*/

	// vertical carousel on students page
    $('.jcarousel').each(function() {
		$(this).jcarousel({
			vertical: true,
			scroll: 2,
			initCallback: function(carousel) {
				$('.jprev').bind('click', function() {
					carousel.prev();
					return false;
				});
				$('.jnext').bind('click', function() {
					carousel.next();
					return false;
				});
			},
			buttonPrevHTML: null,
			buttonNextHTML: null
		});
    });

	// address lookup on registering page
	$('#postcodeLookup').bind('click', function() {
		var cp_access_token = "ad628-5826d-52b49-0065c"; // ***** DON'T FORGET TO PUT YOUR ACCESS TOKEN HERE IN PLACE OF X's !!!! *****
		var cp = CraftyPostcodeCreate();
		// generic setup
		cp.set("access_token", cp_access_token);
		cp.set("busy_img_url", "../images/loading.gif");
		cp.set("first_res_line", "--- please select your address ---");
		cp.set("res_autoselect", "0");
		cp.set("result_elem_id", "postcodeLookupResult");
		cp.set("form", "reg_form");
		cp.set("elem_company"  , "company_name"); // optional
		cp.set("elem_street1"  , "address1_1");
		cp.set("elem_street2"  , "address1_2"); // optional, but highly recommended
		cp.set("elem_street3"  , "address1_3"); // optional
		cp.set("elem_town"     , "address1_4");
		cp.set("elem_county"   , "address1_5"); // optional
		cp.set("elem_postcode" , "address1_postcode");
		//cp.set("elem_udprn" 	 , "udprn"); // optional
		cp.set("single_res_autoselect", 1); // don't show a drop down box if only one matching address is found
		cp.set("err_msg1", "This postcode could not be found.");
		cp.set("err_msg2", "This postcode is not valid.");
		// callbacks
		cp.set("max_width", '350px');
		cp.set("on_result_selected", showAddressFields);
		cp.set("on_result_ready", function() {
			if($('input[name=town]').val() != '') {
				showAddressFields();
			}
		});
		cp.set("on_error", function() {
			showAddressFields();
		});
		// house name/num search setup
		cp.set("elem_search_house", "housenumber");
		cp.set("single_res_notice", ""); // set this to get rid of the ---- address found, see below ---- message
		cp.doHouseSearch();

		function showAddressFields() {
			$('#postcodeLookupResultHolder').show();
			$('#postcodeLookupAddressFields').show();
		}
	});

	// registering form
	$("form[name=reg_form]").each(function() {

		$('select[name=member_type]').each(function() {

			calculate();
			$.getJSON('_ajax_get_member_prices.php', function(json) {

				$('select[name=member_type]').children(':first').text('Please select...');

				// binding
				$('select[name=member_type], input[name=main_publication], .member-access').bind('change', function() {

					calculate(json);
					$('#desc-' + $(this).val()).show().siblings().hide();
					// show pgce box
					if ($(this).val() == 'pgce') {
						$('.form-pgce').show();
						$('#member_annual').text('2 year');
					} else {
						$('.form-pgce').hide();
						$('#member_annual').text('Annual');
					}
					//
				});

				// injecting date fields in
				$('#dob_d').each(function() {
					for (i = 1; i <= 31; i++) {
						$(this).append('<option value="' + i + '">' + i + '</option>');
					}
				});
				$('#dob_m').each(function() {
					var arr = new Array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
					for (i = 1; i <= 12; i++) {
						$(this).append('<option value="' + i + '">' + arr[i-1] + '</option>');
					}
				});
/*				$('#dob_y').each(function() {
					var year = new Date().getFullYear();
					for (i = (year - 70); i <= (year - 16); i++) {
						$(this).append('<option value="' + i + '">' + i + '</option>');
					}
					$(this).parent().next().children('input').val('1/1/' + (year - 16));
				});*/

			});

			function calculate(json) {

				// disabling
				$('.publications, .membership').find('ul li').each(function() {
					if (!$(this).children('div').hasClass('relative')) {
						$(this).wrapInner('<div class="relative" style="position: relative"></div>');
					}
					$(this).find('input').attr({disabled: true});
					if (!$(this).children('div').children('div').hasClass('disabled')) {
						$(this).children('div').append('<div class="disabled" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: #ECEFF7; filter: alpha(opacity = 50); opacity: 0.5;"></div>');
					}
				});

				if (json && $('select[name=member_type]').val()) {
					var memtype = $('select[name=member_type]').val();
					var memtypedesc = $('select[name=member_type] option:selected').text();

					// option
					for (var key in json[memtype]) {
						$('input[name=main_publication][value=' + key + ']').removeAttr('disabled').parent().next('.disabled').remove();
					}
					if (!$('input:radio[name=main_publication]:enabled:checked').val()) {
						$('input:radio[name=main_publication]:enabled:first').attr({checked: true});
					}
					//
					var option = $('input[name=main_publication]:checked').val();
					//var access = $('input[name=member_access]:checked').val(); *** needed?

					var summary = '<span style="text-transform: capitalize;">' + memtypedesc + ' ' + option + '</span> Membership';
					var value = json[memtype][option];
					// access
					for (var key in json[memtype].rates) {
						if (option != key) {
							$('input[name=access-' + key + ']').removeAttr('disabled').parent().next('.disabled').remove();
							if ($('input[name=access-' + key + ']').is(':checked')) {
								var name = ($('.' + key).attr('title') != '') ? $('.' + key).attr('title') : key;
								summary += (summary.substr(-4) == 'ship') ? ' with ' + name + ', ' : name + ', ';
							}
						}
						value = ($('input[name=access-' + key + ']').is(':enabled:checked')) ? json[memtype].rates[key] + value : value;
					}
					//
				} else {
					var summary = '';
					var value = 0;
				}
				summary = (summary.substr(-2) == ', ') ? summary.substring(0, summary.length - 2) : summary;
				value = value.toFixed(2);
				$('#member_summary').html(summary);
				$('#member_price').html('&pound;' + value);
				//
			}

		});

		// dropdown validation
		$(this).find('select').bind('change', function() {
			$(this).valid();
		});

		// validating
		$(this).validate({
			rules: {
				member_type: {
					required: true
				},
				firstnames: {
					required: true
				},
				title: {
					required: true
				},
				lastname: {
					required: true
				},
				job_title: {
					required: true
				},
				sub_email: {
					required: true,
					email: true,
					availability: true
				},
				sub_email_confirm: {
					required: true,
					email: true,
					equalTo: "#sub_email"
				},
				address1_1: {
					required: true
				},
				telephone: {
					required: true
				},
				address1_postcode: {
					required: true
				},
				cap_text: {
					required: true,
					captcha: true
				}
			},
			highlight: function(element) {
				//$(element).addClass('error').parent().addClass('error-triangle');
				if ($(element).prev('img').length == 0) {
					$(element).addClass('error').css({marginRight: '26px'}).before('<img src="../images/validation_error.gif" style="position: absolute; left: ' + ($(element).outerWidth() + 2) + 'px" />');
				} else {
					$(element).removeClass('ok').addClass('error').prev('img').attr({src: '../images/validation_error.gif'});
				}
				// telephone only
				if ($(element).attr('name') == 'telephone') {
					$(element).parent().prev().children('select').removeClass('ok').addClass('error');
				}
			},
			unhighlight: function(element) {
				if ($(element).prev('img').length == 1) {
					$(element).removeClass('error').addClass('ok').prev('img').attr({src: '../images/validation_ok.gif'}).fadeOut('slow', function() {
						$(element).removeClass('ok');
						$(this).remove();
						// telephone only
						if ($(element).attr('name') == 'telephone') {
							$(element).parent().prev().children('select').removeClass('ok');
						}
					});
					// telephone only
					if ($(element).attr('name') == 'telephone') {
						$(element).parent().prev().children('select').removeClass('error').addClass('ok');
					}
				}
			}
		});

		// adding new validation methods
		$.validator.addMethod('availability', function(value, element) {
			var output = null;
			$.ajax({
				url: '_ajax_get_member_status.php',
				data: 'email=' + value,
				async: false,
				dataType: 'json',
				success: function(result) {
					output = (result && result.status == 1) ? true : false;
					if (result && result.text) {
						$.validator.messages.availability = result.text;
						//console.log(result.text);
					}
				}
			});
			return output;
		}, 'Sorry, this email is not available');

		// captcha
		$.validator.addMethod('captcha', function(value, element) {
			var output = null;
			$.ajax({
				url: '_ajax_get_captcha.php',
				async: false,
				dataType: 'json',
				success: function(result) {
					output = (result && result.code == value) ? true : false;
				}
			});
			return output;
		}, 'Please type the text from the image');

		// injecting calendar in
		$(this).find('#date').datepicker({
			showOn: 'button',
			buttonImage: '../images/icon28x28calendar.gif',
			buttonImageOnly: true,
			dateFormat: 'd/m/yy',
			onSelect: function(dateText) {
				var date = dateText.split('/');
				$('#dob_d').val(date[0]);
				$('#dob_m').val(date[1]);
				$('#dob_y').val(date[2]);
			}
		});
		$(this).find('select[name=title]').bind('change', function() {
			if ($(this).val() == 'other') {
				$('input[name=titleother]').fadeIn();
			} else {
				$('input[name=titleother]').fadeOut().val('');
			}
		});
		$(this).find('select[name=job_title]').bind('change', function() {
			if ($(this).val() == 'other') {
				$('input[name=job_title_other]').fadeIn();
			} else {
				$('input[name=job_title_other]').fadeOut().val('');
			}
		});
	});

});
