if (top != self) top.location.replace(self.location);

document.observe('dom:loaded', function()
{
	// Rotate signup label text
	if($('signup-rotating')) changeSignupLabel.delay(3);
	
	// Display popup itinerary map
  if($('btn-view-map') && $('journey-map') && $('popup-container'))
  {
		window.map_for_popup = $('popup-container').remove();
    window.map_for_popup.show();
    window.map_for_popup.down('a').observe('click', blackbox.hide.bind(blackbox));
    $('btn-view-map').observe('click', displayMap);
    $('journey-map').observe('click', displayMap);
  }
	
	// Brochure download form/event tracking
	if($$('.template-form-dl').first())
	{
		// Get form templates
		window.template = 
		{
			dl_request: (Element.down(document, '.template-form-dl'))? Element.down(document, '.template-form-dl').remove(): null
		}
		
		// Set template trigger behaviours
		Event.observe(Element.down(template.dl_request, '.trigger-send'), 'click', function(event)
		{
			// Serialize form values
			var form_data = Form.serialize('brochure_download_request', true);
			
			// Validate form data
			if(form_data.first_name == '') Element.addClassName('brochure_download_first_name', 'invalid');
			else Element.removeClassName('brochure_download_first_name', 'invalid');
			if(form_data.last_name == '') Element.addClassName('brochure_download_last_name', 'invalid');
			else Element.removeClassName('brochure_download_last_name', 'invalid');
			if(form_data.email == '') Element.addClassName('brochure_download_email', 'invalid');
			else Element.removeClassName('brochure_download_email', 'invalid');
			
			// Where the input is invalid
			if(Element.select('brochure_download_request', '.invalid').length != 0) 
			{
				// Display error notice
				Effect.Appear('form-error', {duration:0.25});
				
				// Halt the event and return out
				Event.stop(event); return;
			}
			
			// Hide error notice if displayed
			if($('form-error').getStyle('display') != 'none') Effect.Fade('form-error', {duration:0.25});
			
			// Init AJAX call to store form input
			new Ajax.Request('/utility/act_downloadRequest.cfm', 
			{
				parameters: form_data,
				onSuccess: function(form_data)
				{
					if(form_data.subscribe) trackMailingListSubscription(true, 'Brochure Download');
				}.bind(window, form_data)
			});
			
			// Clear listeners from dl triggers
			$$('.trigger-form-dl').each(function(trigger) { Event.stopObserving(trigger, 'click'); });
			
			// Switch class names
			$$('.trigger-form-dl').each(function(trigger) { trigger.removeClassName('trigger-form-dl'); trigger.addClassName('trigger-download'); });
			
			// Add download trigger events
			$$('.trigger-download').each(function(trigger)
			{
				Event.observe(trigger, 'click', trackBrochureDLEvent);
			});
			
			// Fire GA event tracker
			trackBrochureDLEvent(event);
			
			// Hide modal window
			var forceHide = blackbox.hide.bind(blackbox);
			forceHide();
			
			// Event should now successfully fire and open link in new window
		});
		
		template.dl_request.select('.trigger-cancel').each(function(trigger)
		{
			Event.observe(trigger, 'click', blackbox.hide.bindAsEventListener(blackbox));
		});
		
		// For each brochure download form trigger
		$$('.trigger-form-dl').each(function(trigger)
		{
			trigger.observe('click', function(event, template)
			{
				var original_trigger = $(event.findElement('a')), form_trigger = template.dl_request.down('.trigger-send');
				
				event.stop();
				
				form_trigger.removeClassName('major');
				if(original_trigger.hasClassName('major')) form_trigger.addClassName('major');
				
				template.dl_request.show();
				
				form_trigger.writeAttribute('href', original_trigger.getAttribute('href'));
				form_trigger.writeAttribute('title', original_trigger.getAttribute('title'));
				
				blackbox.write(template.dl_request);
			}.bindAsEventListener(document, template));
		});
	
		// For each brochure download event tracking trigger
		$$('.trigger-download').each(function(trigger)
		{
			Event.observe(trigger, 'click', trackBrochureDLEvent);
		});
	}
	
	// Member home - hide intro
	if($('trigger-hide-intro'))
	{
		$('trigger-hide-intro').observe('click', function(e)
		{
			e.stop();
			if(e.target.hasClassName('open'))
			{
				e.target.removeClassName('open');
				$('collapse').slideUp({duration:0.5, queue:{scope:'intro-content', position:'end', limit:2}});
			}
			else
			{
				e.target.addClassName('open');
				$('collapse').slideDown({duration:0.5, queue:{scope:'intro-content', position:'end', limit:2}});
			}
		});
	}
	
	// Sundowner form
	if($('sundownerForm'))
	{
		// Title
		configureSelectWithOther('title');
		// Delivery preference
		$('sundownerForm').select('.send-via').each(function(element)
		{
			element.observe('click', function(event)
			{
				var trigger = event.findElement('input'), kase = trigger.up('td').select('input[type=radio]').find(function(element) { return element.checked; }).getAttribute('value'), address_row = $('addressRow');
				switch(kase.toUpperCase())
				{
					case 'EMAIL':
						address_row.hide();
						break;
					default:
						address_row.show();
						break;
				}
			});
		});
		// State
		configureSelectWithOther('state');
		
		$('sundownerForm').observe('submit', function(event)
		{
			var form = event.findElement('form'), errors = [], error_container = $('errorBox');
			var fields = 
			{
				title: $('title'),
				title_alt: $('other'),
				first_name: $('fName'),
				last_name: $('lName'),
				age_group: $('ageGroup'),
				email: form.down('input[name=email]'),
				delivery_method: form.select('.send-via').find(function(input) { return input.checked; }),
				address: $('address'),
				suburb: $('suburb'),
				state: $('state'),
				state_alt: $('otherState'),
				postcode: $('postcode'),
				country: $('country'),
				referral_source: $('referral'),
				destinations: form.select('input[name=destIntest]').findAll(function(input) { return input.checked; }),
				interests: form.select('input[name=activityInterest]').findAll(function(input) { return input.checked; })
			};
			
			// Validate form
			if($F(fields.title) === '' || ($F(fields.title).toLowerCase() === 'other' && $F(fields.title_alt))) errors.push('Please select a title');
			if($F(fields.first_name) === '') errors.push('Please enter your first name');
			if($F(fields.last_name) === '') errors.push('Please enter your last name');
			if($F(fields.age_group) === '') errors.push('Please select an age group');
			if($F(fields.email) === '') errors.push('Please enter a valid email address');
			if(!$(fields.delivery_method)) errors.push('Please select a delivery method');
			if($F(fields.delivery_method) !== 'email')
			{
				if($F(fields.address) === '') errors.push('Please enter your address');
				if($F(fields.suburb) === '') errors.push('Please enter your suburb');
				if($F(fields.country) === 11 && ($F(fields.state) === '' || ($F(fields.state).toLowerCase() === 'other' && $F(fields.state_alt)))) errors.push('Please select a state');
			}
			if($F(fields.referral_source) === '') errors.push('Please select where you heard about Abercrombie &amp; Kent');
			if($(fields.destinations).length === 0) errors.push('Please select at least one destination');
			if($(fields.interests).length === 0) errors.push('Please select at least one holiday interest');
			
			if(errors.length > 0)
			{
				event.stop();
				errors.each(function(container, error, i)
				{
					if(i === 0) container.update(new Element('p').update('Please correct the following errors:'));
					container.insert({bottom:new Element('p', { 'style':'margin:0; padding:0;' }).update('- ' + error)});
				}.curry(error_container));
				error_container.show();
				window.location = '#form';
			}
			else trackSundownerRegistration($F(fields.delivery_method));
		});
	}
	
	$$('a.fb-photo-comp').invoke('observe', 'click', function (event) 
	{
		if (pageTracker) pageTracker._trackEvent('External Link', 'Facebook Photo Competition');
		// if (console) console.log('Tracking event');
	});
});

function changeSignupLabel()
{
	var labels = ['Win a wine tasting pack', 'Exclusive offers &amp; specials', 'Fantastic new destinations'];
	$('signup-rotating').update((labels.indexOf($('signup-rotating').innerHTML) + 1 < labels.length)? labels[labels.indexOf($('signup-rotating').innerHTML) + 1]: labels[0]);
	
	changeSignupLabel.delay(3);
}

// Track the GA events
function trackBrochureDLEvent(event)
{
	var trigger, request;
	
	try
	{
		trigger = event.findElement('a');
		
		// Log the event
		request = new Ajax.Request('/utility/ajax-logger.cfm',
		{
			method: 'post',
			parameters: { type:'event', event_category:'Download', event_group:trigger.hasClassName('major')? 'Full Brochure': 'Sub-brochure', event_name:trigger.getAttribute('title') }
		});
		
		pageTracker_old._trackEvent('Downloads', (trigger.hasClassName('major'))? 'Full Brochure': 'Sub-brochure', trigger.getAttribute('title'));
		pageTracker._trackEvent('Downloads', (trigger.hasClassName('major'))? 'Full Brochure': 'Sub-brochure', trigger.getAttribute('title'));
	}
	catch(e)
	{
		// Log the error
		request = new Ajax.Request('/utility/ajax-logger.cfm', { method:'post', parameters:{ type:'error', error_message:e.message } });
	}
}

function trackBrochureRequest(state)
{
	try
	{
		pageTracker_old._trackEvent('Form', 'Brochure Request', 'State - ' + state);
		pageTracker._trackEvent('Form', 'Brochure Request', 'State - ' + state);
	}
	catch(e)
	{
		// Log the error
		request = new Ajax.Request('/utility/ajax-logger.cfm', { method:'post', parameters:{ type:'error', error_message:e.message } });
	}
}

function trackMailingListSubscription(subscribed, source)
{
	if(!subscribed) return;
	try
	{
		pageTracker_old._trackEvent('eMarketing', 'Subscribe', 'Source - ' + source);
		pageTracker._trackEvent('eMarketing', 'Subscribe', 'Source - ' + source);
	}
	catch(e)
	{
		// Log the error
		request = new Ajax.Request('/utility/ajax-logger.cfm', { method:'post', parameters:{ type:'error', error_message:e.message } });
	}
}

function trackSundownerRegistration(type)
{
	try
	{
		pageTracker_old._trackEvent('eMarketing', 'Sundowner Registration', 'Type - ' + type);
		pageTracker._trackEvent('eMarketing', 'Sundowner Registration', 'Type - ' + type);
	}
	catch(e)
	{
		// Log the error
		request = new Ajax.Request('/utility/ajax-logger.cfm', { method:'post', parameters:{ type:'error', error_message:e.message } });
	}
}

function displayMap(event)
{
  if(event) event.stop();
  blackbox.write(window.map_for_popup);
}

function addFavouriteJourney(member_id, journey_id, category, notes)
{
	new Ajax.Request('/utility/act_addFavouriteJourney.cfm', {
		method: 'post',
		parameters: {
			member_id:	member_id,
			journey_id:	journey_id,
			category:	category,
			notes:		notes
		},
		onSuccess: function(transport) {
			try
			{
				// Translate response
				var response = transport.responseJSON;
				// Switch on success
				if(response.success)
				{
					$$('.save-notification').each(function(element)
					{
						element.addClassName('journey-saved');
						element.removeClassName('journey-already');
						Effect.Appear(element, {duration:0.5, queue:{scope:'member-notify:'+($(element.parentNode).hasClassName('wrap-saved')?'body':'top'), position:'end', limit:2}});
						Effect.Fade.delay(3, element, {duration:0.5, queue:{scope:'member-notify:'+($(element.parentNode).hasClassName('wrap-saved')?'body':'top'), position:'end', limit:2}});
					});
				}
				else
				{
					$$('.save-notification').each(function(element)
					{
						element.addClassName('journey-already');
						element.removeClassName('journey-saved');
						Effect.Appear(element, {duration:0.5, queue:{scope:'member-notify:'+($(element.parentNode).hasClassName('wrap-saved')?'body':'top'), position:'end', limit:2}});
						Effect.Fade.delay(3, element, {duration:0.5, queue:{scope:'member-notify:'+($(element.parentNode).hasClassName('wrap-saved')?'body':'top'), position:'end', limit:2}});
					});
				}
			}
			catch(e)
			{
				if(console) console.log(e);
			}
		},
		onFailure: function(e) {
			if(console) console.log(e);
		}
	});
	
	return false;
}

function removeFavouriteJourney(member_id, journey_id, category, notes)
{
	new Ajax.Request('/utility/act_removeFavouriteJourney.cfm', {
		method: 'post',
		parameters: {
			member_id:	member_id,
			journey_id:	journey_id,
			category:	category,
			notes:		notes
		},
		onSuccess: function(transport) {
			try
			{
				// Translate response
				var response = transport.responseJSON;
				// Switch on success
				if(response.success)
				{
					window.location.reload(true);
				}
				else
				{
					alert(response.message);
				}
			}
			catch(e)
			{
				if(console) console.log(e);
			}
		},
		onFailure: function(e) {
			if(console) console.log(e);
		}
	});
	return false;
}

function writeTwitterLink($url, $title)
{
	new Ajax.Request('/utility/act_getSmallUrl.cfm', {
		method: 'post',
		parameters: {
			longUrl: $url
		},
		onSuccess: function(transport) {
			try
			{
				// Translate response
				var response = transport.responseJSON;
				// Write link to document
				Element.insert($('btn-facebook'), {after:'<a onClick="if(pageTracker._trackEvent) pageTracker._trackEvent(\'Social: Share\', \'Twitter\', \''+$url+'\');" id="btn-twitter" target="_blank" href="http://twitter.com/?status='+$title.truncate('100')+' '+response.results[$url.replace(/&.*$/, '')].shortUrl+'"><b>Twitter</b></a>'});
			}
			catch(e)
			{
				if(console) console.log(e);
			}
		},
		onFailure: function(e) {
			if(console) console.log(e);
		}
	});
}

function bookmarkLink($url, $title)
{
	if(document.all) window.external.AddFavorite($url, $title);
	else if(window.sidebar) window.sidebar.addPanel($title, $url, null);
	else alert('To bookmark this page in Safari/Chrome press ctrl+d\r\nOpera users press ctrl+t');
	return false;
}

function toggleAgentDetails()
{
	if($('use_travel_agent').checked == true) $('agent_details').style.display = 'block';
	else $('agent_details').style.display = 'none';
}

var send2friend_container = null;

function send2friend (id, url)
{
	if(isNaN(id)) return false;
	
	// Create interface if none exists
	if(!send2friend_container)
	{
		// Create wrapper
		var wrapper = new Element('div', {'id':'popup-container'});
		// Create content container
		var content = wrapper.appendChild(new Element('div', {'id':'popup-wrapper'}));
		// Create header
		var header = content.appendChild(new Element('div', {'id':'popup-header'}));
		// Add header elements
		header.appendChild(new Element('img', {'src':'/images/global/popup-header.gif', 'alt':''}));
		
		// Add close control to header
		var ctrl_close = header.appendChild(new Element('a', {'id':'closeWindow', 'href':'#'}));
		ctrl_close.appendChild(new Element('img', {'src':'/images/auctions/btn-close-popup.gif', 'alt':'Close'}));
		// Add behaviours
		Event.observe(ctrl_close, 'click', blackbox.hide.bind(blackbox));
		
		// Add text body
		var text = content.appendChild(new Element('div', {'id':'popup-content'}));
		text.appendChild(new Element('p').update('Know a fellow traveller who might be interested in this journey?<br />Fill in the details below to email this journey to a friend.'));
		text.appendChild(new Element('label', {'for':'sender_name'}).update('Your name'));
		var sender_name = text.appendChild(new Element('input', {'id':'sender_name', 'maxlength':'50'}));
		text.appendChild(new Element('label', {'for':'sender_email'}).update('Your email'));
		var sender_email = text.appendChild(new Element('input', {'id':'sender_email'}));
		text.appendChild(new Element('span', {'style':'display:block;clear:both;margin-bottom:10px;'}));
		text.appendChild(new Element('label', {'for':'recipient_name'}).update('Friend\'s name'));
		var recipient_name = text.appendChild(new Element('input', {'id':'recipient_name', 'maxlength':'50'}));
		
		text.appendChild(new Element('label', {'for':'recipient_email'}).update('Friend\'s email'));
		var recipient_email = text.appendChild(new Element('input', {'id':'recipient_email'}));
		var validation_msg = text.appendChild(new Element('div', {'id':'validation-msg', 'style':'display:none'}));
		validation_msg.appendChild(new Element('div').update('Could not send email, please make sure all fields are<br />complete and both email addresses are valid.'));
		text.appendChild(new Element('span', {'style':'display:block;clear:both;margin-bottom:10px;'}));
		
		text.appendChild(new Element('label', {'for':'recipient_message'}).update('Optional message'));
		var recipient_message = text.appendChild(new Element('textarea', {'id':'recipient_message'}));
		text.appendChild(new Element('span', {'style':'display:block;clear:both;margin-bottom:10px;'}));
		
		var response_panel_wrapper = text.appendChild(new Element('div', {'id':'response-panel', 'style':'display:none;'}));
		var response_panel = response_panel_wrapper.appendChild(new Element('div'));
		response_panel.appendChild(new Element('p', {'style':'margin-left:100px;'}));

		var ctrl_more = response_panel.appendChild(new Element('a', {'href':'#'}).update('Forward to another friend &gt;&gt;'));
		Event.observe(ctrl_more, 'click', function($event) {
			Event.stop($event);
			$('recipient_name').value = '';
			$('recipient_email').value = '';
			
			$('response-panel').fade({duration:0.25, queue:{scope:'s2f:success', position:'end'}});
			$('submit-panel').appear({duration:0.25, queue:{scope:'s2f:success', position:'end'}});
		});
		
		var ctrl_back = response_panel.appendChild(new Element('a', {'href':'#'}).update('Back to journey &gt;&gt;'));
		ctrl_back.addClassName('quiet');
		Event.observe(ctrl_back, 'click', blackbox.hide.bind(blackbox));
		
		var submit_panel_wrapper = text.appendChild(new Element('div', {'id':'submit-panel'}));
		var submit_panel = submit_panel_wrapper.appendChild(new Element('div'));


		var ctrl_submit = submit_panel.appendChild(new Element('a', {'href':'#'}).update('<b>Send</b>'));
		ctrl_submit.addClassName('btn-send');
		Event.observe(ctrl_submit, 'click', function($event){
			Event.stop($event);
	
			// Sender name
			if($F('sender_name') == '') $('sender_name').addClassName('invalid');
			else $('sender_name').removeClassName('invalid');
			
			// Sender email
			if(!/^([a-zA-Z0-9\-\.])+\@([a-zA-Z0-9\-\.])+\.([a-zA-Z]{2,4})$/.test($F('sender_email'))) $('sender_email').addClassName('invalid');
			else $('sender_email').removeClassName('invalid');
	
			// Recipient name
			if($F('recipient_name') == '') $('recipient_name').addClassName('invalid');
			else $('recipient_name').removeClassName('invalid');
			
			// Recipient email
			if(!/^([a-zA-Z0-9\-\.])+\@([a-zA-Z0-9\-\.])+\.([a-zA-Z]{2,4})$/.test($F('recipient_email'))) $('recipient_email').addClassName('invalid');
			else $('recipient_email').removeClassName('invalid');
			
			if($event.target.parentNode.parentNode.parentNode.select('.invalid').length) { $('validation-msg').slideDown({duration:0.25}); }
			else
			{
				if($('validation-msg').getStyle('display') != 'none') $('validation-msg').slideUp({duration:0.25});
				
				// Add ajax loader animation
				
				// Send ajax request
				new Ajax.Request('/utility/act_send2friend.cfm', {

					method: 'post',
					parameters: {
						sender_name:$F('sender_name'),
						sender_email:$F('sender_email'),
						recipient_name:$F('recipient_name'),
						recipient_email:$F('recipient_email'),
						recipient_message:$F('recipient_message'),
						journey_id:id,
						url:url
					},
					evalJSON: true,
					onSuccess: function(transport) {
						// Translate response
						var response = transport.responseJSON;
						
						// Check success of action
						if(response.success == true) {
							$('response-panel').select('p')[0].update('Thank you! We\'ve just sent this to<br />'+$F('recipient_email'));
							
							$('submit-panel').fade({duration:0.25, queue:{scope:'s2f:success', position:'end'}});
							$('response-panel').appear({duration:0.25, queue:{scope:'s2f:success', position:'end'}});
						} else {
							modalContainer.hide();
						}
					},
					onFailure: function(error) {
						var forceClose = blackbox.hide.bind(blackbox);
						forceClose();
					}
				});
			}
	
		});
		
		var ctrl_cancel = submit_panel.appendChild(new Element('a', {'href':'#'}).update('&gt; Cancel, I\'ve changed my mind'));
		ctrl_cancel.addClassName('quiet');
		Event.observe(ctrl_cancel, 'click', blackbox.hide.bind(blackbox));
		
		// Set external alias
		send2friend_container = wrapper;
		
	}
	
	// Track event
	if(pageTracker._trackEvent) pageTracker._trackEvent('Social: Share', 'Send to a Friend', url);

	// Write to modal window
	blackbox.write(send2friend_container);
	
	// Return false to cancel the event
	return false;
}

var TextCounter = Class.create
({
    initialize: function(textareaid, displayid, maxLength) {
        this.maxLength = maxLength;
        this.textarea = $(textareaid);
        this.display = $(displayid);
        this.display.innerHTML = maxLength;
        Event.observe(this.textarea, 'keyup', this.checkChars.bindAsEventListener(this));
        Event.observe(this.textarea, 'keydown', this.checkChars.bindAsEventListener(this));
        this.checkChars();
    }, 
    checkChars: function(e) {
        var includeBreaksInCount = false; // false = don't count a return (\r or \n) in the count.
        var charCount = this.textarea.value.length;
        var breaks = 0;
        if (!includeBreaksInCount) {
            var lines = this.textarea.value.split('\n');
            breaks = lines.length;
            // check for /r at the end of the lines (IE)
            for (var i=0; i<lines.length; i++) {
                var line = lines[ i ];                
                if (line.charCodeAt(line.length-1) == 13)
                    breaks++;
            }
            
        }
        
        // check if over limit
        if ((charCount-breaks) > this.maxLength) {            
            this.textarea.value = this.textarea.value.substring(0, (this.maxLength + breaks) );
        }
        
        // update counter
        if (this.display) {
            if ((charCount-breaks) > this.maxLength) {
                this.display.innerHTML = 0;
            } else {
                this.display.innerHTML = (this.maxLength + breaks) - charCount;
            }        
        }
    }
});

function configureSelectWithOther (element)
{
	$(element).observe('change', function(event)
	{
		var trigger = event.findElement('select'), target = trigger.next('.other');
		if($F(trigger).toLowerCase() === 'other') target.show();
		else target.hide();
	});
}
