/**
* Register Cufon fonts
*/
Cufon.replace('h1[class!=rss], h1.rss span, h2[class!=no-cufon], .puff .title, .puff h2, table#basket-contents thead th, .image-grid h3, #no-account h3, #event.workshop .tab-container h3, #ticket-type th, #city-art thead th', {fontFamily: 'Futura Std Medium'});
Cufon.replace('#header .logo span, #carousel .overlay p.button a, #carousel .overlay p.button em, #minibasket .checkout-links li.checkout, button.large, button.medium, a.button-medium, a.button-large, ul.step-indicator, #puff-book-tickets h2', {fontFamily: 'Futura Std Heavy'});

/**
* Register PNG fix
*/
if(window.DD_belatedPNG)
{
	DD_belatedPNG.fix('#head-strip, #nav, #nav li, .image .video-play');
}

/**
* Set up defaultText for textfields
*/
$(document).ready(function()
{
	/* header site search element */
	$('#search').lineDefaultFieldText({textSrc: 'label'});

	$('#event_search_keywords').lineDefaultFieldText({textSrc: 'label'});

	/* search-results search element */
	$('#search-form .search').lineDefaultFieldText({textSrc: 'legend'});
});

/**
* Set up jquery UI datepicker
*/
$(document).ready(function()
{
	try
	{
		$('.datepicker-permenant').datepicker({
			onSelect: function(date, inst)
			{
				$('#book-tickets-date').val(date);
			}
		})
		.ready(function()
		{
			$('.datepicker-permenant').parent().find('.datepicker-permenant label').hide();
			$('.datepicker-permenant').parent().find('.datepicker-permenant input[type=text]').each(function() {
				$('<input />')
					.attr('type', 'hidden')
					.attr('name', $(this).attr('name'))
					.attr('id', $(this).attr('id'))
					.insertAfter(this);

				$(this).remove();
			})
		});
	}
	catch(e) {}
});

/**
* Add navigation marker element
*/
(function($)
{
	var isIE6 = $.browser.msie && parseInt($.browser.version) === 6;

	if(!isIE6)
	{
		$(document).ready(function()
		{
			$('#nav').find('li.active').each(function()
			{
				var el = $('<div />').addClass('nav-marker');
				var c = $(this).css('background-color');

				el.css({backgroundColor: c}).appendTo(this);
			});
		});
	}
})
(jQuery);

/**
* Add faux opacity to 'did you know' spotlight
*/
(function($)
{
	$(window).ready(function()
	{
		var el = $('#did-you-know');

		$('dd, dt', el).each(function()
		{
			var sub_el = $(this);

			/* containing element */
			sub_el.wrapInner('<div />');

			sub_el.find('div').css({position: 'relative'});
			
			var mask = $('<div />')
				.css({
					width: sub_el.outerWidth(),
					height: sub_el.outerHeight(),
					position: 'absolute',
					top: 0,
					left: 0,
					backgroundColor: sub_el.css('background-color'),
					opacity: 0.7
				});

			sub_el.css({
				position: 'relative',
				backgroundColor: 'transparent'
			});

			mask.prependTo(sub_el);
		});
	});
})
(jQuery);

/**
* Allows faux opacity on specified elements (@40%)
*/
(function($)
{
	$(window).ready(function()
	{
		var els = $('.image-grid .category-title');

		els.each(function()
		{
			var div = $('<div />')
				.addClass('opacity')
				.css({
					height: $(this).outerHeight() + 'px',
					width: $(this).outerWidth() + 'px',
					position: 'absolute',
					top: parseInt($(this).css('top')) + 'px',
					left: parseInt($(this).css('left')) + 'px',
					backgroundColor: $(this).css('background-color'),
					opacity: 0.4
				})
				.insertBefore(this);

			$(this).css({
				backgroundColor: 'transparent'
			});
		});
	});
})
(jQuery);

/**
* Allow the poll rows to be clickable (label-esque)
*/
(function($)
{
	$(document).ready(function()
	{
		$('#poll[class!=results] li').each(function()
		{
			var _li = $(this);

			_li.find('*')
				.css({cursor: 'pointer'})
				.click(function()
				{
					_li.find('input').attr('checked', true);
				});
		});
	});
})
(jQuery);

/**
* 'Discovered items' text swap
*/
(function($)
{
	$(document).ready(function()
	{
		$('#discovered-items').each(function()
		{
			var container = $(this);

			$('.thumbs li', container).each(function()
			{
				$(this).hover(function()
				{
					var els = $(this).find('> *').not($('> a', this)).clone();

					$('.info', container).html(els);
				},
				function()
				{});
			});
		});
	});
})
(jQuery);

/**
* Lightbox (Fancybox)
*/
(function($)
{
	$(document).ready(function()
	{
		try
		{
			$(".horizontal_thumbs a").fancybox({
				'hideOnContentClick': true,
				'speedIn'		: 600,
				'speedOut'		: 200,
				'overlayShow'	: true,
				'transitionIn'	: 'elastic',
				'transitionOut'	: 'elastic',
				'easingIn'      : 'easeOutBack',
				'easingOut'     : 'easeInBack',
				'opacity'		: 0.58,
				'overlayColor'	: '#000'
			});
		}
		catch(e) {}
	});
})
(jQuery);

/**
 * Removes the excess border on poll results
 */
(function($)
{
	$(document).ready(function()
	{
		$('#poll dl').each(function()
		{
			var dd = $('dd', this);

			if(dd.width() < 1)
			{
				dd.addClass('no-border');
			}
		});
	});
})
(jQuery);

/**
* Form error styling
*/
(function($)
{
	$(window).ready(function()
	{
		$('form ul.error_list').each(function()
		{
			var ul = $(this);
			var ctrlHolder = $(this).parent();
			
			ul.addClass('js-support');

			/* textarea/select/input */

			var fldWidth = ctrlHolder.find('input, textarea, select').outerWidth();
			var ulPadding = parseInt(ul.css('padding-left')) + parseInt(ul.css('padding-right'));
			var ulMargin = parseInt(ul.css('margin-left')) + parseInt(ul.css('margin-right'));
			var ideal = ctrlHolder.innerWidth() - fldWidth - ulPadding - ulMargin;

			/* 100px min-width, just to be safe */
			if(ideal > 100)
			{
				ul.width(ideal);
			}
			else
			{
				ul.removeClass('js-support');
			}
		});
	});
})
(jQuery);

/**
* Passthru for console.log (IE!)
*/
if(!window.console)
{
	console = {
		log: function(msg) {}
	};
}

/**
* Workaround for IE6 multiple button form submit issue
*/
if($.browser.msie && parseInt($.browser.version) <= 6)
{
	window.attachEvent("onload", function()
	{
		var buttons = document.getElementsByTagName('button');
		
		for(var i=0; i<buttons.length; i++)
		{
			if(buttons[i].onclick)
				continue;

			buttons[i].onclick = function()
			{
				for(j=0; j<this.form.elements.length; j++)
					if(this.form.elements[j].tagName == 'BUTTON')
						this.form.elements[j].disabled = true;

				this.disabled = false;
				this.value = this.attributes.getNamedItem("value").nodeValue ;
			}
		}
	});
}

/**
 * Adds tab functionality
 */
(function($)
{	
	$(document).ready(function()
	{
		var containers = $('.tab-container');

		containers.each(function()
		{
			var container = $(this);
			var tabs = container.find('.tab');

			if(tabs.length)
			{
				/**
				 * Create tab strip
				 */
				var tabStrip = $('<div><ul></ul></div>').addClass('tab-selector');

				tabs.each(function(i)
				{
					var _tab = $(this);
					var _h = $(this).find('> h2');

					_tab.addClass('tab-' + i);

					var _anc = _h.text()
						.replace(/[^a-zA-Z0-9]+/g, '')
						.toLowerCase();

					var _li = $('<li></li>')
						.addClass('tab-' + i);

					var _m = $('<div class="marker" />');

					var _a = $('<a></a>')
						.click(function(e)
						{
							e.preventDefault();

							_li.addClass('active');
							_li.siblings().removeClass('active');
							_m.css({
								backgroundColor: _li.css('background-color')
							})
							_tab.siblings().not(tabStrip).hide();
							_tab.show();
						})
						.attr('href', '#tab-' + _anc)
						.text(_h.text());

					_li.append(_a).append(_m).appendTo(tabStrip.find('> ul'));
					_h.remove();
				});

				tabStrip.prependTo(container);
				$(tabStrip.find('a').get(0)).click();
			}
		});
	});

	/**
	 * Detect the location hash and select relevant tab
	 */
	$(function()
	{
		var hash = document.location.hash;

		if(typeof hash == 'string')
		{
			var _a = $('a[href^=' + hash + ']');
			
			if(hash.match(/^#tab/) && _a.length)
			{
				_a.click();
			}
		}
	});
})
(jQuery);

/**
 * Events page booking form
 */
(function()
{
	$(document).ready(function()
	{
		var _f = $('#event.workshop form#booking');

		var params = new Array();

		params['booking_date'] = getQueryString('booking[date]');
		params['booking_performance'] = getQueryString('booking[performance]');

		if(_f.find('input#booking_can_gift_aid').val() == 1)
		{
			$('<input type="hidden" name="booking[show_gift_aid_tickets]" value="1" id="gift_aid_status" />').prependTo(_f);
		}

		/**
		 * Returns the value for the specified QS parameter
		 *
		 * @param string param QS key
		 * @return string
		 */
		function getQueryString(param)
		{
			var hu = window.location.search.substring(1);
			var gy = hu.split("&");
			for (i=0; i<gy.length; i++)
			{
				ft = gy[i].split("=");
				if (ft[0] == param)
				{
					ft[1] = ft[1].replace(':', '');
					return unescape(ft[1]);
				}
			}
			return null;
		}
		
		if(_f.length)
		{
			var event_id = $('#booking_event_id').val();

			$.getJSON('/json_event_date/' + event_id, function(keyData)
			{
				var _minDate = $('input#booking_min_calendar_date', _f).val();

				var _validDates = new Array();

				var j = 0;
				for(var i in keyData)
				{
					if(keyData[i] == 'available')
					{
						_validDates[j++] = i;
					}
				}

				/**
				 * Set up datepicker element
				 */
				var dp = $('#date-picker', _f).datepicker({
					dateFormat: 'dd/mm/yy',
					minDate: _minDate,
					onSelect: function(date, inst)
					{
						$('#date-picker input#booking_date', _f).val(date);
						_f.find('#time-select, #ticket-type').remove();
						loadStep(true);
					},
					beforeShowDay: function(input, inst)
					{
						var arr = new Array();

						arr[0] = false;
						arr[1] = '';

						for(var i in keyData)
						{
							var _d = new Date(i);

							if(_d.toString() == input.toString())
							{
								if(keyData[i] == 'available')
								{
									arr[0] = true;
								}
								arr[1] = keyData[i];
							}
						}
						return arr;
					}
				});
				
				dp.ready(function()
				{
					$('#date-picker', _f).parent().find('#date-picker input[type=text]').each(function() {
						$('<input />')
							.attr('type', 'hidden')
							.attr('name', $(this).attr('name'))
							.attr('id', $(this).attr('id'))
							.insertAfter(this);

						$(this).remove();
					});

					/* select first available option, if there's only one */
					if(_validDates.length == 1)
					{
						$('#date-picker', _f).find('.available a').click();
					}

					/* select QS date if specified */
					if(params.booking_date)
					{
						var _dateParts = params.booking_date.split('/');

						dp.datepicker('setDate', new Date(_dateParts[2], _dateParts[1] - 1, _dateParts[0]))
						dp.find('a.ui-state-active').click();
					}
				});

				/**
				 * Add the datepicker colour key
				 */
				$('<div id="date-key">' +
					'<ul>' +
						'<li class="available"><span>*</span> Tickets available</li>' +
						'<li class="sold-out"><span>*</span> Tickets sold out</li>' +
						'<li class="selected"><span>*</span> Selected</li>' +
						'<li class="unavailable"><span>*</span> Unavailable</li>' +
					'</ul>' +
				'</div>').appendTo(dp);
			});

			/**
			 * Set up the styled radio elements
			 */
			function applyRadioStyling()
			{
				var options = $('<div />').addClass('time-options').appendTo($('#time-select', _f));
				var val = $('<input type="hidden" />');
				
				$('input[type=radio]', _f).each(function()
				{
					var _input = $(this);
					var _div = $('<div />').addClass('option').attr('id',  'value-'+_input.val().replace(':', ''));

					var _a = $('<a href="#">' + _input.parent().find('label').text() + '</a>')
						.click(function(e)
						{
							e.preventDefault();

							_f.find('#ticket-type').remove();

							$(this).parent().addClass('active');
							$(this).parent().siblings().removeClass('active');
							val.attr('name', _input.attr('name'));
							val.attr('value', _input.attr('value'));

							loadStep(true);
						});
					
					_div.append(_a);

					_div.append('<div class="marker" />');

					_div.appendTo(options);

					_input.parent()
						.parent()
						.remove();
				});

				val.appendTo(options);

				/* select QS time, if specified */
				if(params.booking_performance)
				{
					var t = $('#time-select', _f).find('#value-'+params.booking_performance.replace(':', '')+ ' a').click();
				}
			}

			function removeUpdateButtons()
			{
				_f.find('button')
					.not($('.basket-buttons button'))
					.remove();
			}

			function loadStep(giftAidChecked)
			{
				$.ajax({
					type: 'GET',
					url: '/json_event_performances',
					cache: 'false',
					data: _f.serialize(),
					dataType: 'json',
					success: function(data)
					{
						if(typeof data.ticketTypes == 'object')
						{
							_f.find('#ticket-type').remove();
							updateTicketTypeArea(data.ticketTypes);
							
							if(data.tickets_available_from_notice && data.tickets_available_from_notice.length)
							{
								displayErrorOverlay('Attention', data.tickets_available_from_notice);
							}
						}
						else if(typeof data.times == 'object')
						{
							
							updateTimeArea(data.times);

							if(data.day_pass_notice && data.day_pass_notice.length)
							{
								$('#attention', _f).show().find('td').html(data.day_pass_notice);
							}
							else
							{
								$('#attention', _f).hide();
							}

							if(data.disable_checkout)
							{
								$('#time-select', _f).find('.option a').removeClass('active').css({cursor: 'default'}).unbind('click').bind('click', function(e)
								{
									e.preventDefault();

									var z = 0;
									function pulsate()
									{
										z++;

										if(z == 3) return;
										
										$('#attention', _f).animate({ opacity: 0.1 }, 500, function()
										{
											$(this).animate({opacity: 1}, 500, pulsate);
										});
									}
									pulsate();
								});

							}
						}

						// set checked status depending on previous status
						if($('input#gift_aid_status').val() == '1')
						{
							$('input#booking_show_gift_aid_tickets').attr('checked', 'checked');
						}

						Cufon.replace('form#booking h3, form#booking button, form#booking table#ticket th', {fontFamily: 'Futura Std Medium'});
						Cufon.replace('form#booking .basket-buttons button, form#booking .basket-buttons a.button-medium', {fontFamily: 'Futura Std Heavy'});

					}
				})
			}

			function updateTicketTypeArea(data)
			{
				var html = '<div id="ticket-type">';

				if(!window.event_type)
				{
					event_type = 'event';
				}

				switch(event_type)
				{
					case 'reservation':
						html+='<h3>Step 3. Select the type of ticket you wish to reserve</h3>';
						break;
					case 'pass':
						html+='<h3>Step 3. Day pass type</h3>' +
								'<p class="select-ticket-type">Select the type of ticket you wish to buy.</p>';
						break;
					default:
						html+='<h3>Step 3. Ticket type</h3>' +
								'<p class="select-ticket-type">Select the type of ticket you wish to buy.</p>';
						break;
				}



				html+='<table id="ticket">' +
							'<thead>' +
								'<tr>' +
									'<th>Ticket type</th>' +
									'<th>Price</th>' +
									'<th>Quantity</th>' +
								'</tr>' +
							'</thead>' +
							'<tbody>' +
							'</tbody>' +
						'</table>' +
						'<div class="basket-buttons">' +
              '<p><button class="medium" type="submit" name="add_to_basket" id="add_to_basket">Add to basket</button></p>' +
							'<p><button class="medium" type="submit" name="add_and_checkout" id="add_and_checkout">Go to checkout</button></p>' +
						'</div>' +
					'</div>';

				if(!_f.find('#ticket-type').length)
				{
					$(html).insertAfter('#time-select');
				}

				_f.find('#ticket-type .ctrlHolder').empty();

				if(_f.find('input#booking_can_gift_aid').val() == 1)
				{
					$('#booking_show_gift_aid_tickets').remove();

					var _ga = $('<div id="gift_aid" class="ctrlHolder type_checkbox">' +
					  '<input type="checkbox" id="booking_show_gift_aid_tickets" />' +
					  '<label for="booking_show_gift_aid_tickets">Include Gift Aid? (<a href="/whats-on/city-art-centre-day-pass/gift-aid">What is gift aid?</a>)</label>' +
					'</div>');

					_ga.insertAfter(_f.find('p.select-ticket-type'));
				}

				$('input#booking_show_gift_aid_tickets').change(function()
				{
					var check_box = false;
					$('#gift_aid_status', _f).val('0');
					if($('input#booking_show_gift_aid_tickets').is(':checked'))
					{
						check_box = true;
						$('#gift_aid_status', _f).val('1');
					}
					console.log(check_box)
					//_f.find('#ticket-type').remove();
					loadStep(check_box);
				});

				for(var i in data)
				{
					var _html = $('<tr>'+
						'<td>' + data[i].title + '</td>' +
						'<td>&pound;' + data[i].price + '</td>' +
						'<td><div class="ctrlHolder"><input type="text" name="booking[qty][' + data[i].input_name + ']" value="0" /></div></td></tr>');

					if((data.length - 1) == i)
					{
						_html.addClass('last');
					}

					_f.find('#ticket-type tbody').append(_html)
				}

				_f.find('#add_and_checkout').parent().hide();

				_f.find('#add_and_checkout').replaceWith('<a class="button-medium" id="add_and_checkout" href="/checkout/your-details">Go to checkout</a>');


			}

			function updateTimeArea(data)
			{
				var html = '<div id="time-select">' +
						'<h3>Step 2. Select time</h3>' +
						'<p>Select an available time.</p>' +
						'<div class="ctrlHolder">' +

						'</div>' +
					'</div>';

				_f.find('#time-select').remove();

				if(!_f.find('#time-select').length)
				{
					$(html).insertAfter('#date-select');
				}

				_f.find('#time-select .ctrlHolder').empty();

				var $i = 0;
				for(var i in data)
				{
					_f.find('#time-select .ctrlHolder').append('<div class="radio"><label for="time_'+$i+'">'+i+'</label><input type="radio" name="booking[performance]" id="time_'+$i+'" value="'+data[i]+'" /></div>')
					$i++;
				}
				applyRadioStyling();

				/* click the first choice if there's only one option */
				if($('#time-select .time-options a', _f).length == 1)
				{
					$($('#time-select .time-options a', _f).get(0)).click();
				}
			}
			applyRadioStyling();
			removeUpdateButtons();
		}
	});
})
(jQuery);

(function($)
{
	$(document).ready(function()
	{
		var fixedPositionClass = 'fixed-overlay';

		$('.datepicker').datepicker({
			showAnim: 'fadeIn',
			dateFormat: 'dd/mm',
			beforeShow: function(input, inst)
			{
				inst.dpDiv.addClass(fixedPositionClass)
			},
			onClose: function(date, inst)
			{
				var interval = setInterval(function()
				{
					if(inst.dpDiv.is(':hidden') && inst.dpDiv.not(':animated'))
					{
						inst.dpDiv.removeClass(fixedPositionClass);
						clearInterval(interval);
					}
				}, 50);
			},
			onSelect: function(dateText, inst)
			{
				if($(inst).attr('id') == 'event_search_date_from')
				{
					$('#event_search_date_to').val(dateText);
				}
			}
		});
	})
})
(jQuery);

function displayErrorOverlay(_heading, text)
{
	var overlay;
	var modal;
	var close;

	triggerPopup();

	function triggerPopup()
	{
		overlay = $('<div />')
			.addClass('added-overlay')
			.css({
				opacity: 0.58,
				height: $(document).height() + 'px'
			});

		overlay.hide();

		$(window).resize(function()
		{
			overlay
				.css({
					height: $(document).height() + 'px'
				});
		});

		modal = $('<div />').addClass('added-modal').hide();
		close = $('<a class="close" href="#">Close</a>')
			.click(closeModal)
			.prependTo(modal);

		$('<h2 class="no-cufon" />')
			.text(_heading)
			.appendTo(modal);

		var msg = text;

		if(!msg.match('<p>'))
		{
			$('<p />')
				.html(msg)
				.appendTo(modal);
		}
		else
		{
			$(msg).appendTo(modal);
		}

		

		overlay.appendTo('body');
		modal.appendTo('body');

		overlay.fadeIn(300, function()
		{
			modal.fadeIn(200);

			/*setTimeout(function()
			{
				hidePopup();
			}, 4000);*/
		});
	}

	function closeModal(e)
	{
		e.preventDefault();
		hidePopup();
	}

	function hidePopup()
	{
		close.unbind('click');

		modal.fadeOut(500, function()
		{
			overlay.fadeOut(500, function()
			{
				overlay.remove();
				modal.remove();
				close.remove();
			});
		});
	}
}
